首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gradle中,子项目可以覆盖rootProject中定义的resolutionStrategy吗?

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

Stack Overflow用户
提问于 2014-01-08 00:43:57
回答 1查看 2.3K关注 0票数 0

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

代码语言:javascript
复制
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"
      }
    }
...

在一个特定的子项目中,我希望更改应用的版本并使用另一个版本。我尝试过设置configuration {}、configurations {}和简单的resolutionStrategy,但它们都不起作用。这是否可能,或者是我需要将这个子项目移到另一个完全不同的项目中的信号?

更新:

我试过这个:

代码语言:javascript
复制
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- build_p7c7h594c24dhb3ll7q8nj34m$_run_closure4_closure19_closure21@3eff4d1f -rest-boot:resolutionStrategy’中找不到参数启动的方法eachDependency()。

这一点:

代码语言:javascript
复制
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’。

EN

回答 1

Stack Overflow用户

发布于 2014-01-08 03:53:04

依赖关系规则是针对每个配置的,配置是针对每个项目的。要使新规则生效,您必须使用与在allprojects下使用的语法相同的正确语法

代码语言:javascript
复制
project("spring-data-rest-boot") {
    ...
    configurations.all { 
        resolutionStrategy.eachDependency { ... } 
    }
}

但是,如果您将第一个依赖项规则保留为allprojects,那么您最终将得到两个相互竞争的spring-date-rest-boot规则,这就提出了一个问题,即哪一个会赢。

如果只有一个项目需要特殊处理,您还可以在allprojects规则中使用条件:

代码语言:javascript
复制
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的值

代码语言:javascript
复制
project("spring-data-rest-boot") {
    ...
    springVersion = "4.0.0.RELEASE"
}

有更多的方法可以解决这个问题,但我希望您现在就明白了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20977138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档