如何在Gradle中包含多模块项目?

时间:2018-09-27 15:25:26

标签: java gradle multi-module

我正在尝试将功能添加到多模块Gradle Java项目中(如果您好奇的话,它是Spring集成的)。我已将该项目分叉到本地计算机上,并正在创建一个单独的Gradle项目,该项目引用此本地克隆的项目进行开发。

在我的新项目中,settings.gradle文件如下所示:

include ":springint"
project(":springint").projectDir = file("/users/me/git/spring-integration")

rootProject.name = 'sprinttest'

我从build.gradle中引用了它:

dependencies {
    compile project(":springint")
...

问题在于,它似乎仅考虑该/ git / spring-integration目录的build.gradle,而不考虑其settings.gradle。这是一个问题,因为有很多子模块通过它的settings.gradle文件引用,当我运行本地项目时这些子模块没有被拾取。我得到的错误是:

  
      
  • 出了什么问题:   评估项目':springint'时发生问题。   在项目':springint'中找不到路径为'spring-integration-test-support'的项目。
  •   

如果查看spring-integration的settings.gradle,您会发现它动态包含了所有这些子项目:

rootProject.name = 'spring-integration'

rootDir.eachDir { dir ->
    if (dir.name.startsWith('spring-integration-')) {
        include ":${dir.name}"
    }
}

我认为gradle会在构建时自动合并此依赖项的settings.gradle,但事实并非如此,因为这就是为什么未找到 spring-integrationtest-support 的原因。我是否缺少某些东西,还是应该从该项目的设置中“重新创建”相同的逻辑到自己的逻辑中?

1 个答案:

答案 0 :(得分:2)

您只能定义一个文件,并且只能定义一个settings.gradle文件。

https://docs.gradle.org/current/userguide/userguide_single.html#sec:defining_a_multiproject_build

  

要定义多项目构建,您需要创建一个设置文件。   设置文件位于源树的根目录中,并且   指定要包含在构建中的项目

如果要在子项目中包含子项目,请使用以下语法:

include "a-subproject:an-inner-subproject"

它看起来像这样:

include "springint"
project(":springint").projectDir = file("/users/me/git/spring-integration")

rootProject.name = 'sprinttest'

project(":springint").projectDir.eachDir { dir ->
    if (dir.name.startsWith('spring-integration-')) {
        include "springint:${dir.name}"
    }
}