java - Gradle似乎忽略了项目依赖

标签 java gradle dependencies subproject

我们有一个多项目构建,在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/

相关文章:

java - Linux 上采用 OpenJDK11 选择

java - 如何在单个对象上接受泛型参数的父类(super class)型?

java - Spring.io REST 教程中的构建错误

android - API 'variantOutput.getProcessManifest()' 已过时

macos - 如何将环境变量传递给由 Intellij IDEA 管理的 gradle 构建文件

java.lang.IllegalStateException 在 android.media.MediaRecorder

java - 具有自定义切换日期的 GregorianCalendar 在切换前设置了意外日期

c++ - 静态初始化命令惨败

mysql - zeppelin sql 解释器错误,无法获取 mysql 的依赖项 :mysql-connector-java:5. 1.38

algorithm - 简单依赖算法的问题