使用SCM进行Gradle Multiproject

时间:2016-08-13 12:05:53

标签: gradle build.gradle git-submodules

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

目前,每个项目都是单独的CVS,当我想要编译A时,我必须检查A,在A中创建一个名为B的子目录,其中我查看了B.同样适用于C.

我将迁移到存储库管理器(nexus),其中可以发布B和C.当发生这种情况时,模块A可以只依赖于它可以从nexus获得的B和C.

然而,如果我不想发布B和C(用于测试目的)并且我想使用来自B和C的最新代码构建A而不将其提交给nexus,则会出现困难。

我对此的初步想法是为B和C构建jar并将其拉入A的“lib”文件夹。但我确定有更好的方法。

在maven我可以做一个“mvn clean install”,它会在我的本地maven缓存中安装B和C.然后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

1 个答案:

答案 0 :(得分:0)

旧(经典)方式

与Maven相同的方法:

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

    上运行B

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

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

  5. 新方式(实践) - 复合构建

      

    复合构建允许您组合多个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