在我的项目中,这是根项目部分:
configure(allprojects) {
apply plugin: "java"
apply plugin: "idea"
apply plugin: "eclipse"
apply from: "${gradleScriptDir}/ide.gradle"
group = "org.springframework.data"
configurations.all {
// Hack to let Gradle pickup latest SNAPSHOTS
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
// Force all core Spring Framework libraries into the same version
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework') {
details.useVersion "$springVersion"
}
}
...
在一个特定的子项目中,我想更改应用的版本并使用另一个版本。我尝试将配置{},配置{}和简单的resolutionStrategy放入,但是它们都不起作用。这是否可行,或者是我需要将该子项目完全移至其他项目的信号?
更新:
我尝试了这个:
project("spring-data-rest-boot") {
apply plugin: "spring-boot"
description = "Spring Data REST example using Spring Boot"
configurations {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework') {
details.useVersion "4.0.0.RELEASE"
}
}
}
...
并得到了这一点:在配置':spring-data-rest-boot:resolutionStrategy'上找不到参数[build_p7c7h594c24dhb3ll7q8nj34m $ _run_closure4_closure19_closure21 @ 3eff4d1f]的方法eachDependency()。
这个:
project("spring-data-rest-boot") {
apply plugin: "spring-boot"
description = "Spring Data REST example using Spring Boot"
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework') {
details.useVersion "4.0.0.RELEASE"
}
}
...
产生了这样的结果:在项目':spring-data-rest-boot'上找不到属性'resolutionStrategy'。
最佳答案
依赖关系规则是按配置的,而配置是按项目的。为了使新规则生效,您必须使用与allprojects
相同的正确语法:
project("spring-data-rest-boot") {
...
configurations.all {
resolutionStrategy.eachDependency { ... }
}
}
但是,如果为第一个依赖项规则保留
allprojects
,最终将为spring-date-rest-boot
使用两个竞争规则,这引发了一个问题:哪个将获胜。如果只有一个项目需要特殊处理,则还可以在
allprojects
规则中使用条件:allprojects {
...
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework') {
if (project.name == "spring-data-rest-boot") {
details.useVersion("4.0.0.RELEASE")
} else {
details.useVersion(springVersion)
}
}
}
}
另一个可行的解决方案是简单地更改
springVersion
的值:project("spring-data-rest-boot") {
...
springVersion = "4.0.0.RELEASE"
}
还有更多的方法可以解决这个问题,但我希望您现在就明白了。
关于gradle - 在gradle中,子项目可以覆盖rootProject中定义的resolutionStrategy吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977138/