Gradle:通过版本分类器覆盖传递依赖

新手上路,请多包涵

我的项目中声明的依赖项之一具有对 'com.google.guava:guava:15.0' 的传递依赖项。但是由于已在 'com.google.guava:guava:15.0:cdi1.0' 中修复的 CDI 问题,我部署在 WAS/Weblogic 上的应用程序无法正常工作。 (相同版本,但带有分类器)我需要告诉 gradle 在构建和打包过程中使用这个 jar。我试图弄清楚我们如何使用特定于 jar 的版本分类器来覆盖这种传递依赖性。

尝试了以下方法:

  1. 显式添加依赖项: compile 'com.google.guava:guava:15.0:cdi1.0' 。但是这两个罐子都包含在由此产生的 WAR 中。

  2. 显式添加依赖并定义解析策略:

    configurations.all {
       resolutionStrategy {
           force 'com.google.guava:guava:15.0:cdi1.0'
       }
   }

即使这样也行不通。

  1. 定义了一个解决策略来检查和更改版本。
    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            if (details.requested.group + ":" + details.requested.name == 'com.google.guava:guava') {
               details.useVersion "15.0:cdi1.0"
               //details.useTarget "com.google.guava:guava:15.0:cdi1.0"
           }
       }
   }

即使这样也行不通。

需要您就如何解决此问题提出建议。

原文由 dinup24 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

当前,在涉及 resolutionStrategies 时尚未考虑分类器。在声明依赖项并显式添加 Guava cdi1.0 版本时,您的解决方法可能会排除传递性 Guava 库:

 dependencies {
    compile ("org.acme:someDependency:1.0"){
        exclude group: 'com.google.guava', module: 'guava'
    }
    compile "com.google.guava:guava:15.0:cdi1.0"
}

原文由 Rene Groeschke 发布,翻译遵循 CC BY-SA 4.0 许可协议

我遇到了一种更优雅的方法,它很简单:

 compile ("com.google.guava:guava:15.0:cdi1.0") {
  force = true
}

解释

为依赖项设置 force = true 告诉 gradle 在版本冲突的情况下使用指定的版本

原文由 Sobvan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题