Gradle 在依赖链中找不到项目
Gradle cannot find a project in a dependency chain
我在文件夹结构中有 3 个 Java 项目:Proj1
、Proj2
和 Proj3
。 Proj1
取决于 Proj2
并且它取决于 Proj3
.
这是他们的 settings.gradle
文件:
rootProject.name = 'Proj3'
rootProject.name = 'Proj2'
include ':Proj3'
project(':Proj3').projectDir = new File(settingsDir, '../Proj3')
rootProject.name = 'Proj1'
include ':Proj2'
project(':Proj2').projectDir = new File(settingsDir, '../Proj2')
和他们的 gradle.build
文件:
2人份
apply plugin: 'java'
dependencies {
compile project(':Proj3')
}
对于 1
apply plugin: 'java'
dependencies {
compile project(':Proj2')
}
第二个和第三个项目由 Gradle 构建得很好但是当我尝试构建第一个项目时它抱怨
A problem occurred evaluating project ':Proj2:'. Project with path ':Proj3' could not be found in project ':Proj2'.
并指向 compile project(':Proj3')
行(在 Proj2
的构建中)。堆栈跟踪以
开头
org.gradle.tooling.BuildException: Could not fetch model of type 'EclipseProject' using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.1-bin.zip'.
不知道为什么2号建起来的时候可以找到3号,建1号的时候突然找不到了。为什么第 1 个会关心第 2 个如何在第 3 个已经包含在 "Project and External Dependencies" 文件夹中之后搜索第 3 个。
如何让它发挥作用?
我想,你的项目配置有误。一个多模块项目只能有一个 settings.gradle
文件,这个文件应该包含所有模块。
所以结构可能是这样的:
RootProject/
build.gradle
settings.gradle
Proj1/
build.gradle
Proj2/
build.gradle
Proj3/
build.gradle
并且settings.gradle
至少应该包含以下内容:
include 'Proj1', 'Proj2', 'Proj3'
在那种情况下,您似乎不需要一些额外的设置来更改模块名称或其目录。您可以在 official user guide.
中阅读相关信息
我找到了无需发布任何内容或更改目录结构的方法。
项目 3 不需要 settings.gradle
或其中的依赖项 build.gradle
。
项目 2 需要 settings.gradle
:
include ':Proj3'
project(':Proj3').projectDir = new File(settingsDir, '../Proj3')
和build,gradle
:
dependencies {
compile project(':Proj3')
}
项目 1 需要 settings.gradle
:
include ':Proj3', ':Proj2'
project(':Proj3').projectDir = new File(settingsDir, '../Proj3')
project(':Proj2').projectDir = new File(settingsDir, '../Proj2')
和build,gradle
:
dependencies {
compile project(':Proj2')
}
这就是关键!项目 1 虽然仅依赖于项目 2,但也需要在其设置中包含和指定项目 3。然后一切正常。
我在文件夹结构中有 3 个 Java 项目:Proj1
、Proj2
和 Proj3
。 Proj1
取决于 Proj2
并且它取决于 Proj3
.
这是他们的 settings.gradle
文件:
rootProject.name = 'Proj3'
rootProject.name = 'Proj2'
include ':Proj3'
project(':Proj3').projectDir = new File(settingsDir, '../Proj3')
rootProject.name = 'Proj1'
include ':Proj2'
project(':Proj2').projectDir = new File(settingsDir, '../Proj2')
和他们的 gradle.build
文件:
2人份
apply plugin: 'java'
dependencies {
compile project(':Proj3')
}
对于 1
apply plugin: 'java'
dependencies {
compile project(':Proj2')
}
第二个和第三个项目由 Gradle 构建得很好但是当我尝试构建第一个项目时它抱怨
A problem occurred evaluating project ':Proj2:'. Project with path ':Proj3' could not be found in project ':Proj2'.
并指向 compile project(':Proj3')
行(在 Proj2
的构建中)。堆栈跟踪以
org.gradle.tooling.BuildException: Could not fetch model of type 'EclipseProject' using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.1-bin.zip'.
不知道为什么2号建起来的时候可以找到3号,建1号的时候突然找不到了。为什么第 1 个会关心第 2 个如何在第 3 个已经包含在 "Project and External Dependencies" 文件夹中之后搜索第 3 个。
如何让它发挥作用?
我想,你的项目配置有误。一个多模块项目只能有一个 settings.gradle
文件,这个文件应该包含所有模块。
所以结构可能是这样的:
RootProject/
build.gradle
settings.gradle
Proj1/
build.gradle
Proj2/
build.gradle
Proj3/
build.gradle
并且settings.gradle
至少应该包含以下内容:
include 'Proj1', 'Proj2', 'Proj3'
在那种情况下,您似乎不需要一些额外的设置来更改模块名称或其目录。您可以在 official user guide.
中阅读相关信息我找到了无需发布任何内容或更改目录结构的方法。
项目 3 不需要 settings.gradle
或其中的依赖项 build.gradle
。
项目 2 需要 settings.gradle
:
include ':Proj3'
project(':Proj3').projectDir = new File(settingsDir, '../Proj3')
和build,gradle
:
dependencies {
compile project(':Proj3')
}
项目 1 需要 settings.gradle
:
include ':Proj3', ':Proj2'
project(':Proj3').projectDir = new File(settingsDir, '../Proj3')
project(':Proj2').projectDir = new File(settingsDir, '../Proj2')
和build,gradle
:
dependencies {
compile project(':Proj2')
}
这就是关键!项目 1 虽然仅依赖于项目 2,但也需要在其设置中包含和指定项目 3。然后一切正常。