在我的项目中声明的其中一个依赖项对 'com.google.guava:guava:15.0'
具有传递依赖性 . 但是我在WAS / Weblogic上部署的应用程序由于CDI问题而无法正常工作,该问题已在 'com.google.guava:guava:15.0:cdi1.0'
中修复 . (相同的版本,但有分类器)我需要告诉gradle在构建和打包过程中使用这个jar . 我试图弄清楚如何使用jar特定的版本分类器来提取这种传递依赖性 .
试过以下方法:
-
明确添加了依赖项:
compile 'com.google.guava:guava:15.0:cdi1.0'
. 但两个 jar 都包含在最终的WAR中 . -
明确添加了依赖项并定义了解决策略:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:15.0:cdi1.0'
}
}
即使这样也行不通 .
- 定义了检查和更改版本的解决方案策略 .
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"
}
}
}
即使这样也行不通 .
需要您就如何解决此问题提出建议 .
4 回答
目前在分辨率策略方面尚未考虑分类器 . 在声明您的依赖项并明确添加guava cdi1.0版本时,您可以解决传递guava lib的变通方法:
我遇到了一个更优雅的方法,简单地说:
解释
为依赖项设置
force = true
会告诉gradle在版本冲突的情况下使用指定的版本Gradle 4.5.1具有DependencySubstitutions功能 . 这是一个替换依赖的示例:
如果某个其他jar指向相同的依赖项,这将不起作用 . Sureshot方式排除依赖