Gradle 在依赖链中找不到项目

Gradle cannot find a project in a dependency chain

我在文件夹结构中有 3 个 Java 项目:Proj1Proj2Proj3Proj1 取决于 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。然后一切正常。