【问题标题】:Gradle ResolutionStrategy in root build.gradle根 build.gradle 中的 Gradle ResolutionStrategy
【发布时间】:2022-01-15 08:33:15
【问题描述】:

是否可以在根build.gradle 中指定在子项目中应用的 ResolutionStrategy?只有将 ResolutionStrategy 直接添加到子项目的 build.gradle 文件中,我才能让它工作。

subprojects {

    configurations.all {
        resolutionStrategy {
            eachDependency { DependencyResolveDetails details ->
                if(details.requested.group == 'org.apache.logging.log4j') {
                    details.useVersion '2.15.0'
                }
            }
        }
    }
}

当我将它放在我的根 build.gradle 并运行 ./gradlew :subproject:dependencies 时,该策略未应用。但是,当我将相同的配置块放入子项目的build.gradle 中时,它会按预期工作。

【问题讨论】:

    标签: java gradle groovy build.gradle


    【解决方案1】:

    在我编写的快速测试项目中使用 Gradle 7.3 对我有用:

    ➜  ./gradlew :module-a:dependencyInsight --dependency log4j
    
    > Task :module-a:dependencyInsight
    org.apache.logging.log4j:log4j:2.15.0 (selected by rule)
       variant "compile" [
          org.gradle.status              = release (not requested)
          org.gradle.usage               = java-api
          org.gradle.libraryelements     = jar (compatible with: classes)
          org.gradle.category            = library
    
          Requested attributes not found in the selected variant:
             org.gradle.dependency.bundling = external
             org.gradle.jvm.environment     = standard-jvm
             org.gradle.jvm.version         = 17
       ]
    
    org.apache.logging.log4j:log4j:2.14.1 -> 2.15.0
    \--- compileClasspath
    

    【讨论】:

    • 啊,似乎 Spring Boot 依赖管理插件以某种方式覆盖了这一点。也许它是以否定 ResolutionStrategy 的特定顺序执行的。在非 Spring 项目中,它无需更改即可工作。在春季项目中,我还必须设置ext['log4j2.version'] = '2.15.0',然后一切正常
    • Spring 依赖管理插件有点“贪婪”,所以你不能完全混合两种风格(Spring/Native Gradle)。看这个精彩的演讲:youtube.com/watch?v=AADeX1AEmzU
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多