【问题标题】:Gradle Multiproject with SCMGradle 多项目与 SCM
【发布时间】:2016-08-13 12:05:52
【问题描述】:

我正在迁移到 Gradle 作为我的 Java 项目构建工具。 我的主要项目 (A) 依赖于其他项目 (B 和 C)。

目前这些项目中的每一个都单独在 CVS 中,当我想编译 A 时,我必须检查 A,在 A 中创建一个名为 B 的子目录,在其中检查 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 会在那里寻找合适的罐子。

但我仍然不确定这是最好的方法。我查看了 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

【问题讨论】:

    标签: gradle build.gradle git-submodules


    【解决方案1】:

    旧的(经典)方式

    与 Maven 相同的方法:

    1. 在项目B 上应用maven 插件
    2. 在项目 B 上运行 gradle clean install

      实际上,如果您的构建正确使用任务输入和输出,您不必每次都clean

    3. 在项目A中,添加mavenLocal()存储库并运行构建

    新方式(实验性)- 复合构建

    复合构建允许您组合多个 Gradle 构建并将外部二进制依赖项替换为项目依赖项,就像您使用单个多项目构建一样 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2015-10-01
      • 2018-11-10
      相关资源
      最近更新 更多