gpt4 book ai didi

gradle - 在gradle中,子项目可以覆盖rootProject中定义的resolutionStrategy吗?

转载 作者:行者123 更新时间:2023-12-03 06:23:12 24 4
gpt4 key购买 nike

在我的项目中,这是根项目部分:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com