【问题标题】:How do I include a multi-module project in Gradle?如何在 Gradle 中包含多模块项目?
【发布时间】:2018-09-27 15:25:25
【问题描述】:

我正在尝试将一个功能添加到一个多模块 Gradle Java 项目中(如果您好奇,它是 spring-integration)。我已经将该项目分叉到我的本地计算机上,并正在创建一个单独的 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 的原因。我是否遗漏了什么,或者我应该从这个项目的设置中“重新创建”相同的逻辑到我自己的设置中?

【问题讨论】:

    标签: java gradle multi-module


    【解决方案1】:

    您只能定义一个且只有一个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}"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 2017-03-14
      • 2014-06-09
      • 2019-10-06
      • 2022-01-10
      • 2020-01-26
      • 2018-05-28
      • 1970-01-01
      • 2020-11-10
      相关资源
      最近更新 更多