我们有一个多项目构建,在settings.gradle中的“包含”项目之间具有项目内依赖关系。各个项目之间存在许多相互依存关系,表示为项目依存关系列表中适当大小的项目依存关系。

尽管此方法在其他几个多项目构建中都可以正常工作,但在此特定项目中,不遵守项目依赖关系,因此子项目的构建顺序错误,构建失败。

那么,对于初学者来说,我们如何诊断这里发生的情况以确定它是否是错误?

我们正在运行:
Gradle(包装器)版本:3.1
操作系统:Windows 8.1 6.3 amd64
JDK:Oracle 1.8.0_65

因此-我们最终确定问题出在这里-configuration.all块中存在代码,该代码对各种依赖项设置了useVersion。如果这些依赖项之一恰好是项目依赖项,则该项目依赖项将被破坏。

最佳答案

如果不查看build.gradle的相关摘要,以及不满意的项目如何相互包含的概述,很难回答。这是几个可能的候选人

有时一个项目的评估取决于另一个项目的评估,在这种情况下,您可以使用evaluationDependsOn

project(':projectA') {
    evaluationDependsOn(':projectB')
}
project(':projectB') {
    project(':projectA').tasks.create(...)
}

如果项目依赖项之间存在循环引用,则可以通过添加额外的配置来打破循环
project(':projectA') {
    configurations {
       base
       compile.extendsFrom base
    }
    dependencies {
       base 'aaa:bbb:1.0'
       compile project(path: ':projectB', configuration: 'base')
    }
}
project(':projectB') {
    configurations {
       base
       compile.extendsFrom base
    }
    dependencies {
       base 'ccc:ddd:1.0'
       compile project(path: ':projectA', configuration: 'base')
    }
}

关于java - Gradle似乎忽略了项目依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40111929/

10-12 04:05
查看更多