我有一个Gradle构建,它将我的JOOQ生成的代码拆分为一个单独的jooq
子项目,然后我的api-svc
项目依赖它。
当我将jooq
子项目升级为3.10.1
时,由于某种原因,Gradle决定使用3.9.5
来构建api-svc
。我不知道为什么,我必须通过在我的api-svc
项目中添加显式依赖项来覆盖它。
如何调试正在发生的事情以了解为什么Gradle会覆盖该版本?
我的JOOQ子项目的定义:
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
...
classpath 'org.jooq:jooq-codegen:3.10.1'
...
}
}
...
dependencies {
compile 'org.jooq:jooq:3.10.1'
}
...
以下是jooq
子项目的完整版:https://bitbucket.org/snippets/shorn/64RnL5
并包含在api-svc
项目中:
dependencies {
compile project(":idl")
compile project(":api-svc:jooq")
...
various other compile dependencies, spring-boot, etc.
当我./gradlew :api-svc:jooq:dependencies
时,它说:
------------------------------------------------------------
Project :api-svc:jooq
------------------------------------------------------------
...
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
\--- org.jooq:jooq:3.10.1
...
但是,当我./gradlew :api-svc:dependencies
时,它会显示:
------------------------------------------------------------
Project :api-svc
------------------------------------------------------------
...
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- project :idl
| +--- org.apache.commons:commons-lang3:3.4
| \--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.8.8
| +--- com.fasterxml.jackson.core:jackson-core:2.8.8 -> 2.8.10
| \--- com.fasterxml.jackson.core:jackson-databind:2.8.8 -> 2.8.10
| +--- com.fasterxml.jackson.core:jackson-annotations:2.8.0
| \--- com.fasterxml.jackson.core:jackson-core:2.8.10
+--- project :api-svc:jooq
| \--- org.jooq:jooq:3.10.1 -> 3.9.5
...
此处有完整输出,如果有帮助:https://bitbucket.org/snippets/shorn/4x8eaG
所以,你可以看到Gradle选择使用JOOQ的3.9.5
版本而不是我指定的版本。
如何调试为什么 Gradle正在这样做?
我可以通过添加jooq:3.10.1
作为api-svc
项目的直接编译依赖项来解决这个问题 - 但这是多余的,据我所知,我不应该这样做。
编辑:Lukas Eder在评论中指出问题的根本原因是Spring依赖于JOOQ 3.9.5并且Gradle正在使用它。但问题是 - 我如何在不拖曳项目中的每个依赖项的情况下为自己解决这个问题,以防万一他们碰巧有引用搞乱了我的构建?
答案 0 :(得分:0)
我在Gradle表单上发帖试图找到答案:https://discuss.gradle.org/t/how-do-i-debug-why-a-dependency-was-overridden/24572
在私人消息中还有其他一些讨论,但我的结论是Gradle无法调试这些依赖性覆盖。
如果您在尝试找出自己的构建问题时发现了这个问题 - 唯一的建议似乎是您需要挖掘所有依赖关系以寻找冲突的来源。
或者,尝试StackOverflow问题或在Gradle论坛上发帖。