我正在迁移到 Gradle 作为 Java 项目的构建工具。
我的主要项目 (A) 依赖于其他项目 (B 和 C)。
目前这些项目中的每一个都单独在 CVS 中,当我想编译 A 时,我必须 checkout A,在 A 中创建一个名为 B 的子目录,在其中我 checkout B。C 也是如此。
我将迁移到可以发布 B 和 C 的存储库管理器(nexus)。发生这种情况时,模块 A 只能依赖于 B 和 C,它可以从 nexus 获得。
但是,如果我不想发布 B 和 C(出于测试目的)并且我想使用来自 B 和 C 的最新代码构建 A 而不将其提交到 nexus,则会出现困难。
我最初的想法是为 B 和 C 构建 jar 并将其拉入 A 的“lib”文件夹中。但是我确信有更好的方法。
在 maven 中,我可以执行“mvn clean install”,将 B 和 C 安装到我的本地 maven 缓存中。然后 A 会在那里寻找合适的 jar 。
但我仍然不确定这是最好的方法。我查看了 gradle 子项目,但我不完全理解它们。子模块如何在 SCM 中处理(我是否还需要使用 git 子模块?)
对于这种情况的最佳实践,我将不胜感激。
谢谢
编辑:
Vyacheslav Shvets 下面的回复是我迄今为止找到的最准确的答案。
还有另一种方法可以使用 maven 样式的依赖项切换 gradle 项目依赖项。这涉及到 https://docs.gradle.org/current/userguide/dependency_management.html#sec:project_to_module_substitution 中描述的依赖项替换。
这可以围绕一个:
if(project.hasProperty("someSwitch")){
configurations.all{.....
....
}
}
这种方法的用法是:
gradle build -Psomeswitch
最佳答案
旧(经典)方式
与 Maven 相同的方法:
maven
项目插件 B
gradle clean install
在项目 B
实际上,您不必
clean
每次如果您的构建正确使用任务输入和输出 A
, 添加 mavenLocal()
存储库并运行构建 新方法(实验性)- 复合构建
A composite build allows you to combine multiple Gradle builds and replace external binary dependencies with project dependencies as if you were using a single multi-project build https://docs.gradle.org/2.13/release-notes
这还不完全可用。从 2.13 开始,您可以通过 Tooling API 使用它(例如,Eclipse IDE 的 Buildship 2.0 插件)。常见用法将在 3.1 中提供,但您现在可以尝试使用 nightly builds of 3.1
如果您下载并执行demo build from Gradle's github使用最新的夜间版本,您将看到以下内容:
$ gradle build
[composite-build] Configuring build: C:\Users\Shvets\repos\composite\projectB
[composite-build] Configuring build: C:\Users\Shvets\repos\composite\projectC
:compileJava
:projectB:b1:compileJava
:projectB:b1:processResources UP-TO-DATE
:projectB:b1:classes
:projectB:b1:jar
:projectB:b2:compileJava
:projectC:compileJava
:projectC:processResources UP-TO-DATE
:projectC:classes
:projectC:jar
:projectB:b2:processResources UP-TO-DATE
:projectB:b2:classes
:projectB:b2:jar
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build
BUILD SUCCESSFUL
Total time: 4.497 secs
深入了解见demo video of both approaches .
关于Gradle 多项目与 SCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38932548/