在 Gradle 中确定依赖版本覆盖的来源

Determine source of dependency version override in Gradle

我已经声明了 org.spockframework:spock-spring:1.1.d91bf785-groovy-2.4 的依赖项,但在 运行time 范围内它被覆盖为 1.0-groovy-2.4。有没有办法找出哪个依赖项覆盖了它?

1.0-groovy-2.4 不存在于本地任何 gradle 文件中,当我在 shared-config 项目中 运行 gradle dependencies 时不可见。

这是来自 main-web 项目的 gradle dependencies

testCompile
[...]
+--- project :shared-config
|    [...]
|    +--- org.spockframework:spock-spring:1.1.d91bf785-groovy-2.4
[...]
runtime
[...]
+--- project :shared-config
|    [...]
|    +--- org.spockframework:spock-spring:1.1.d91bf785-groovy-2.4 -> 1.0-groovy-2.4
|    |    +--- org.spockframework:spock-core:1.0-groovy-2.4 -> 1.1.d91bf785-groovy-2.4
|    |    \--- org.codehaus.groovy:groovy-all:2.4.1 -> 2.4.12

dependencyInsight 给出了一些见解:

$ gradle dependencyInsight --dependency org.spockframework:spock-spring:1.0-groovy-2.4 --configuration runtime    
> Task :main-web:dependencyInsight
org.spockframework:spock-spring:1.0-groovy-2.4 (selected by rule)

org.spockframework:spock-spring:1.1.d91bf785-groovy-2.4 -> 1.0-groovy-2.4
\--- project :shared-config
     \--- runtime

但是 shared-config 项目中的相同命令没有产生任何结果:

No dependencies matching given input were found in configuration ':shared-config:runtime'

我尝试覆盖版本但没有成功:

configurations.all {
    resolutionStrategy {
        force "org.spockframework:spock-spring:1.1.d91bf785-groovy-2.4"
    }
}

似乎您正在使用 spring 引导作为父项或 spring 引导依赖项作为 bom(依赖项管理器)

在最新的 spring 引导版本 1.5 + spock.version 中默认设置为 1.0-groovy-2.4 这就是为什么 spock-core 仍然有旧版本。

为了在 gradle 中解决此问题,您需要在 gradle 应用中覆盖 属性 spock.version。通过将 spock.version = 1.1-groovy-2.4 添加到 gradle.properties 文件。

访问 Spring doc for overriding dep properties 了解更多信息。