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

Ice*_*nte 3 java gradle multi-module

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

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

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

rootProject.name = 'sprinttest'
Run Code Online (Sandbox Code Playgroud)

我从我的 build.gradle 中引用它:

dependencies {
    compile project(":springint")
...
Run Code Online (Sandbox Code Playgroud)

问题是它似乎只考虑 /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}"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ToY*_*nos 6

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

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

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

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

include "a-subproject:an-inner-subproject"
Run Code Online (Sandbox Code Playgroud)

它可以看起来像这样:

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}"
    }
}
Run Code Online (Sandbox Code Playgroud)