我正在尝试将功能添加到多模块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 的原因。我是否缺少某些东西,还是应该从该项目的设置中“重新创建”相同的逻辑到自己的逻辑中?
答案 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}"
}
}