Gradle:如何强制执行整个子树的版本?

时间:2019-05-24 01:27:19

标签: gradle gradle-dependencies

有一个图书馆x。它有很多依赖关系和依赖关系。 x的每个版本都有不同的依赖关系树

x
|- x1
|  |- ...
|
|- ...

在我的项目中,我的其他一些依赖项包括带有特定版本的x。其他一些依赖性包括x1x2xk不同版本的依赖性

我要做什么,以明确设置x的版本,并强制其所有依赖项都处于我选择的x声明的版本中

2 个答案:

答案 0 :(得分:0)

您是否尝试过查看gradle dependency constraints

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

您可以将约束放在公共部分,然后简单地声明没有版本的依赖。

答案 1 :(得分:0)

如果没有其他x依赖关系的路径,那么修复x的版本将具有这种效果。

但是,由于Gradle解决了所有参与者之间的冲突,因此,如果x的依存关系(例如y)也恰好是{{1}的依存关系},这是您项目的另一个依赖项,那么两个版本的z都将用于解决冲突。

检测这些问题并因此而不会因解决意外版本而感到惊讶的一种方法是使用failOnVersionConflict resolution strategy,因为如果两条路径带来y但使用不同版本,它将无法解决问题。

5.4版及更低版本没有内置的机制来执行您的要求。