在我的项目中,这是在根项目部分:
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"
}
}
...
在一个特定的子项目中,我想更改应用的版本并使用另一个版本。我已经尝试过配置{},配置{}和简单的resolveStrategy,但它们都不起作用。这是可能的,还是我需要将这个子项目完全移到另一个项目的标志?
更新:
我试过了:
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"
}
}
}
...
得到了这个:在配置'找不到参数[build_p7c7h594c24dhb3ll7q8nj34m $ _run_closure4_closure19_closure21 @ 3eff4d1f]的方法eachDependency():spring-data-rest-boot:resolutionStrategy'。
此:
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'。
答案 0 :(得分:0)
依赖性规则是按配置进行的,配置是按项目进行的。要使新规则有效,您必须使用在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"
}
还有更多方法可以解决这个问题,但我希望你现在能够明白这个想法。