gradle:如何强制执行整个子树的版本?
有一个库gradle:如何强制执行整个子树的版本?,gradle,gradle-dependencies,Gradle,Gradle Dependencies,有一个库x。它有很多依赖项和依赖项的依赖项。每个版本的x都有不同的依赖关系树 x |- x1 | |- ... | |- ... 在我的项目中,我的一些其他依赖项包括带有特定版本的x。其他一些依赖项包括x1、x2、xk不同版本的依赖项 我想做的是显式设置x的版本,并强制其所有依赖项位于我选择的x声明的版本中。您是否尝试过查看 您可以将约束放在一个公共部分中,然后只需声明依赖项,而不在其他地方声明版本。如果没有其他路径指向x的依赖项,则修复x的版本将具有此效果 然而,由于Gradle在所有参与
x
。它有很多依赖项和依赖项的依赖项。每个版本的x
都有不同的依赖关系树
x
|- x1
| |- ...
|
|- ...
在我的项目中,我的一些其他依赖项包括带有特定版本的x
。其他一些依赖项包括x1
、x2
、xk
不同版本的依赖项
我想做的是显式设置x
的版本,并强制其所有依赖项位于我选择的x
声明的版本中。您是否尝试过查看
您可以将约束放在一个公共部分中,然后只需声明依赖项,而不在其他地方声明版本。如果没有其他路径指向
x
的依赖项,则修复x
的版本将具有此效果
然而,由于Gradle在所有参与者之间都进行冲突解决,如果x
的依赖项,比如说y
,也恰好是z
的依赖项,这是项目的另一个依赖项,那么y
的两个版本都将用于冲突解决
检测这些问题并因此对解决意外版本的冲突不感到意外的一种方法是使用,因为如果两条路径产生y
,但版本不同,则解决将失败
Gradle 5.4及之前版本没有内置机制来执行您的请求。是的,但这样我必须手动列出所有依赖项。我想说:
x
的所有可传递依赖项都应该是x
指定的版本
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'
}
}
}