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'
        }
    }
}