【发布时间】:2017-03-22 07:41:14
【问题描述】:
我的公司目前正在为其 Java 项目从 Ant 切换到 Gradle,但我坚持使用干净整洁的设置。假设我为一家为客户构建网站的公司工作,这些客户通常使用相同的根库(核心项目),但有一些特定的代码,这些代码放在子项目中。每个客户,我们建立一个新的子项目,这取决于核心项目。未来客户数量会增加。
目前我们有三个项目:
- 一个核心项目。这应该单独运行,因为我们希望能够为此单独进行单元测试。
- 两个子项目依赖于核心项目,但有一些自己的项目特定于该项目。
我成功地将整个 ant 构建转换为核心项目的 gradle 构建。我的想法是在核心中包含所有功能和项目结构,而仅在子项目中实际需要额外的功能。
这是我们文件夹结构的简短示例:
-- core
- build.gradle
- settings.gradle
-- repository (our external jars used)
-- Implementation
-- source_code
-- all the core project folders
-- Projects
-- Client A
- build.gradle
- settings.gradle
-- more project specific folders
-- Client B
- build.gradle
- settings.gradle
-- more project specific folders
我经常使用 $rootDir 变量。核心的 settings.gradle 的一小部分如下所示:
project(':CoreProjectA').projectDir = new File(rootDir, 'Implementation/Source_code/Core/coreA')
project(':CoreProjectB').projectDir = new File(rootDir, 'Implementation/Source_code/Core/CoreB')
但还有更多。另外,在核心 build.gradle 中,我这样引用我们的存储库:
repositories {
//All sub-projects will now refer to the same 'libs' directory
flatDir {
dirs "$rootDir/repository/lib/jaxb"
//many more dirs here
}
}
现在,当我从核心项目进行 gradle 构建时,这一切都很好。 我打算将下一段代码放在每个客户的子项目 build.gradle 中:
apply from: '../../../build.gradle'
当我从 Client A 文件夹运行 gradle 构建时,我的 rootDir 显然已经改变,现在,我的所有路径都无法在任何地方找到。
有什么方法可以以一种干净整洁的方式进行设置吗?这样以后每个添加的子项目都可以始终使用相同的结构吗?还是我必须为每个子项目完全赋予其自己的 build.gradle 和 settings.gradle?
我知道最后一个选项可行,但开销很大,而且对我来说似乎一点也不干净......
提前致谢!
【问题讨论】:
标签: java gradle build.gradle