Gradle - 多个项目和 git 存储库



我们有 3 个项目,第 4 个项目在它们之间共享。

gradle 中的多个项目需要创建一个包装器项目并将所有子项目包含在其中。

我们的每个子项目都由不同的团队成员处理,我们使用 git 作为 svn。

在进入 gradle 之前,我们关心的是,我们只有 1 个 git 存储库,该存储库由包含所有子项目的包装器项目组成,而不是 4 个不同的存储库,每个存储库分别用于每个子项目。

1)我们错过了什么吗?

2) 是否可以在多项目上创建 4 个存储库?

3)我们的要求之一是部署单个战争(例如,仅部署4个中的webapp #1)--使用多项目模板是否可能?

ad 1)你有一些选择:

  • 使用单个 Git 存储库。
  • 使用多个 Git 存储库并通过二进制存储库(例如 Artifactory)交换工件,CI 作业定期生成工件。
  • 使用类似 Github 子模块的东西来创建"虚拟"的整体 Git 存储库(不建议使用这个)。

广告2)Gradle 并不真正关心构建由多少个 Git 存储库组成,只要构建开始时settings.gradle指向的所有内容(至少所有构建脚本)都存在于磁盘上。当然,对于开发人员(和 CI 管理员)来说,处理多个 Git 存储库并将它们放在正确的(相对)位置可能不方便。

广告3)是的。

我在同一个任务中偶然发现了这个问题,直到后来才有人向我指出了另一个选项(它实际上是 https://stackoverflow.com/a/20678444/1016514 年 ad 1 下列出的第三个选择的变体),这似乎是一个优雅的黑客:

将子项目保留在单独的 Git 存储库中,并通过设置相应的rootDir属性从根项目中指向它们。显然,这需要一个固定的结帐布局,但无论如何通常都是这种情况。

该方法描述如下:https://medium.com/codequest/gradle-multi-project-build-substituting-jar-dependencies-with-local-projects-4a5323f8680b

使用 Gradle 7.3+ 进行更新:现在会产生警告,并且在将来的某个时间点之后可能无法正常工作:

Subproject ':xyz' has location '...xyz' which is outside of the project root.
This behaviour has been deprecated and is scheduled to be removed in Gradle 8.0.
Consult the upgrading guide for further information: 
https://docs.gradle.org/7.3.1/userguide/upgrading_version_7.html#deprecated_flat_project_structure

最新更新