Gradle 不遵守强制依赖版本

Gradle Not Honoring Forced Dependency Version

我无法使用 Gradle 强制依赖版本。我的目标是使用 Spring HATEOAS 库的 0.20.0.RELEASE 版本,但尽管我付出了所有努力,它仍然解析为 0.19.0.RELEASE.

我尝试了多种策略,既有孤立的,也有相互结合的。这些策略包括但可能不限于以下内容(请注意,在所有情况下 $springHateoasVersion 都在 gradle.properties 文件中定义,该文件位于目录中,该目录是模块声明目录的父目录Spring HATEOAS 依赖项):

#1(在声明依赖的模块的 build.gradle 文件中)

apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    dependencies {
        dependency group:'org.springframework.hateoas', name:'spring-hateoas', version:"$springHateoasVersion"
    }
}

#2(在声明依赖的模块的 build.gradle 文件中)

compile ("org.springframework.hateoas:spring-hateoas:$springHateoasVersion") { force = true }

#3(在parent目录的build.gradle文件中)

subprojects {
    configurations.all {
        resolutionStrategy {
            force "org.springframework.hateoas:spring-hateoas:$springHateoasVersion"
        }
    }
}

我已经尽力研究了这个问题:

这个问题有一个可接受的答案,但似乎与我遇到的问题不完全匹配:

这些问题似乎都没有接受答案:1) Gradle is not honoring resolutionStrategy.force, 2) Forcing a module version has no effect on generated org.eclipse.wst.common.component.

除了我的项目坏了(因为我使用了错误版本的 Spring HATEOAS)之外,我还可以明确地看到 Gradle 是 "consciously" select不顾我的抗议,使用了不正确的依赖版本。当我 运行 ./gradlew dependencyInsight --dependency spring-hateoas 时,我看到以下输出:

org.springframework.hateoas:spring-hateoas:0.19.0.RELEASE (selected by rule)

org.springframework.hateoas:spring-hateoas:0.20.0.RELEASE -> 0.19.0.RELEASE
\--- project :Commons
     \--- compile

尽管名称如此,但 dependencyInsight 任务对 哪个 规则导致 Gradle 到 select 不适当的依赖版本提供了令人惊讶的洞察力,更不用说我如何规避上述规则了。

我找到了这个问题的解决方案 。当然这是我没有尝试的一件事,因为它 "didn't seem material"。 :-/

为了让事情正常进行,我将以下内容添加到 parent 目录的 build.gradle 文件中(相对于声明依赖项的模块的目录在 Spring HATEOAS 上)。

subprojects {
    apply plugin: 'io.spring.dependency-management'

    dependencyManagement {
        applyMavenExclusions false
    }

    ext['spring-hateoas.version'] = "$springHateoasVersion"
}