Gradle 依赖解析中约束有什么用?

问题描述 投票:0回答:1

有一个库,即

io.github.elye:simplekotlinlibrary
,版本为 1.0.0、2.0.0 和 3.0.0。

io.github.elye:easyandroidlibrary:1.0.0
包含
io.github.elye:simplekotlinlibrary:1.0.0

io.github.elye:simpleandroidlibrary:2.0.0
包含
io.github.elye:simplekotlinlibrary:2.0.0

所以在我的 Gradle 中,如果我有

    implementation ('io.github.elye:easyandroidlibrary:1.0.0')
    implementation ('io.github.elye:simpleandroidlibrary:2.0.0')
    implementation ('io.github.elye:simplekotlinlibrary:3.0.0')

它将自动解析为项目的

io.github.elye:simplekotlinlibrary:3.0.0
,包括传递依赖项。

但是,通过 https://docs.gradle.org/current/userguide/dependency_constraints.html#sec:adding-constraints-transitive-deps,它指出

constrains
还强制将依赖项升级到指定的版本
3.0.0

    implementation ('io.github.elye:easyandroidlibrary:1.0.0')
    implementation ('io.github.elye:simpleandroidlibrary:2.0.0')
    implementation ('io.github.elye:simplekotlinlibrary')

    constraints {
        implementation('io.github.elye:simplekotlinlibrary:3.0.0') {
            because 'testing force upgrade'
        }
    }

根据我的理解,上面两个例子会产生相同的结果。好像

constraint
没有什么实际用处?
constraint
与不同的自动依赖项解析有何不同?

gradle dependencies constraints gradle-dependencies
1个回答
5
投票

我认为在上面的例子中它们是相同的。

但是,如果顶层项目不需要

io.github.elye:simplekotlinlibrary
,使用
constraint
,仍然可以强制所有传递依赖项至少
constraint
指示的版本,如下所示。

    implementation ('io.github.elye:easyandroidlibrary:1.0.0')
    implementation ('io.github.elye:simpleandroidlibrary:2.0.0')

    constraints {
        implementation('io.github.elye:simplekotlinlibrary:3.0.0') {
            because 'testing force upgrade'
        }
    }

理解 Gradle 依赖解析更容易给出了更详细的说明。

© www.soinside.com 2019 - 2024. All rights reserved.