有一个库,即
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
,包括传递依赖项。
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
与不同的自动依赖项解析有何不同?
我认为在上面的例子中它们是相同的。
但是,如果顶层项目不需要
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 依赖解析更容易给出了更详细的说明。