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"
}
我无法使用 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 不适当的依赖版本提供了令人惊讶的洞察力,更不用说我如何规避上述规则了。
我找到了这个问题的解决方案
为了让事情正常进行,我将以下内容添加到 parent 目录的 build.gradle
文件中(相对于声明依赖项的模块的目录在 Spring HATEOAS 上)。
subprojects {
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
applyMavenExclusions false
}
ext['spring-hateoas.version'] = "$springHateoasVersion"
}