java - 如何配置 gradle 脚本以处理具有根级别构建的多项目
问题描述
这可能吗?
A (folder)
-B (independent project)
-C (independent project)
-D (independent project) and depends on B and C
注意:我还需要一个根级别的 gradle 来构建文件夹 A 级别的所有项目。
这是我到目前为止得到的...
A (build.gradle) 根级别
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
}
allprojects {
apply plugin: 'maven-publish'
repositories {
mavenLocal()
mavenCentral()
}
}
A (settings.gradle) 根级别
rootProject.name = 'A'
include "B"
include "C"
include "D"
单独的独立项目构建非常简单。当我尝试构建项目 D 时,我被卡住了
dependencies {
api project(':B')
api project(':C')
}
基本上 gradle 期望 B 和 C 在 D 之下。我明白了。但是,我怎样才能让它按原样工作呢?
答案:在 settings.gradle 中为 D 添加了以下内容
rootProject.name = 'D'
include 'B'
project(':B').projectDir = file('../B')
include 'C'
project(':C').projectDir = file('../C')
解决方案
项目结构完全独立于项目依赖项。您可以使用任意项目名称和项目目录定义任何项目之间的任何有效(例如非循环)依赖关系。
基本上 gradle 期望 B 和 C 在 D 之下。
不,Gradle 不希望这样。实际上,您当前的设置应该可以正常工作。所有涉及的(子)项目必须在一个文件 settings.gradle
中注册。传递给include
的只是项目名称,不一定与项目的实际位置相关。该方法include
使用约定通过将项目名称转换为路径来推断项目的位置,但可以按照文档中所示进行更改:
// include two projects, 'foo' and 'foo:bar'
// directories are inferred by replacing ':' with '/'
include 'foo:bar'
// include one project whose project dir does not match the logical project path
include 'baz'
project(':baz').projectDir = file('foo/baz')
正如评论中所解释的,第一个示例将创建两个项目,因为'foo:bar'
项目路径需要调用的项目foo
才能存在。您还可以使用includeFlat
从根目录的父目录(即根项目的项目目录)开始的默认路径创建项目。
推荐阅读
- reactjs - 在 React Js axios Get Request 中加载大量产品记录
- java - 骆驼路线的自动调用
- ruby-on-rails - Rails 7.0 发布后,哪些 Rails 版本会收到安全更新?
- javascript - 具有重复值的 FullCalendar 对象...事件显示一次
- vulkan - 订单:在顶点 OP 之后保证片段 OP?逻辑和光栅化顺序似乎很弱
- javascript - 如何从打字稿中的键字符串类型中排除某些类型?
- javascript - 在 Three.JS 中创建圆角矩形的自定义对象组
- angular - Azure DevOps NPM 缓存不匹配
- ios - 为 iOS 9 应用程序降级 Facebook SDK
- azure - 如何使用 AzureDevOps API 获取测试结果?