gpt4 book ai didi

gradle - 如何调试 Gradle 为什么使用我在依赖子项目中指定的不同版本的库?

转载 作者:行者123 更新时间:2023-12-03 05:52:29 27 4
gpt4 key购买 nike

我有一个 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 选择使用 3.9.5 JOOQ 的版本,而不是我指定的版本。

我如何调试 Gradle 这样做的原因?

我可以通过添加 jooq:3.10.1 来解决这个问题作为 api-svc 的直接编译依赖项项目 - 但这是多余的,据我所知,我不应该这样做。

编辑 :Lukas Eder 在评论中指出,问题的根本原因是 Spring 依赖于 JOOQ 3.9.5,而 Gradle 正在使用它。但问题是 - 我如何在不遍历项目中的每个依赖项的情况下为自己弄清楚这一点,以防万一他们碰巧有引用,这弄乱了我的构建?

最佳答案

我在 Gradle 表单上发了一个帖子,试图得到答案:https://discuss.gradle.org/t/how-do-i-debug-why-a-dependency-was-overridden/24572

私信里还有一些其他的讨论,但我的结论是 Gradle 没有办法调试这种依赖覆盖。

如果您在尝试找出自己构建的问题时发现了这个问题 - 唯一的建议似乎是您需要挖掘所有依赖项以寻找冲突的根源。

或者,尝试 StackOverflow 问题或在 Gradle 论坛上发帖。

关于gradle - 如何调试 Gradle 为什么使用我在依赖子项目中指定的不同版本的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46986401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com