有一个库x
。它具有许多依赖关系和依赖性。x
的每个版本都有不同的依赖树
x
|- x1
| |- ...
|
|- ...
在我的项目中,我的其他一些依赖项包括具有某些特定版本的x
。其他一些依赖项包括x1
,x2
,xk
不同版本的依赖项
我想做的是明确设置x
的版本,并在x
声明的版本中执行所有依赖项,我选择了
如果没有x
依赖关系的其他途径,则修复x
的版本将具有该效果。
但是,由于gradle确实在 all 参与者之间的冲突解决,如果x
的依赖性(例如y
(也恰好是z
的依赖性,这是您项目的另一个依赖性,那么y
的版本将用于解决冲突。
检测这些问题的一种方法,因此对解决意外版本的冲突并不感到惊讶,就是使用failOnVersionConflict
分辨率策略,因为如果两个路径带来y
,但使用不同的版本,它将失败分辨率。
gradle 5.4及以前没有内置机制来执行您的要求。
您是否尝试过查看gradle依赖性约束?
dependencies {
implementation 'org.apache.httpcomponents:httpclient'
constraints {
implementation('org.apache.httpcomponents:httpclient:4.5.3') {
because 'previous versions have a bug impacting this application'
}
implementation('commons-codec:commons-codec:1.11') {
because 'version 1.9 pulled from httpclient has bugs affecting this application'
}
}
}
您可以将约束放在共同的部分中,然后简单地声明依赖项,而无需其他任何地方。