声明丰富的版本
Gradle 支持丰富的版本声明模型,允许组合不同级别的版本信息。这些术语及其含义按从最强到最弱的顺序解释如下:
strictly
-
任何与此版本符号不匹配的版本都将被排除。这是最强版本宣言。对于已声明的依赖项,
strictly
可以降级版本。当存在传递依赖时,如果无法选择此子句可接受的版本,则会导致依赖解析失败。有关详细信息,请参阅覆盖依赖项版本。该术语支持动态版本。定义后,它将覆盖任何先前的
require
声明并清除先前的reject
。
require
-
意味着所选版本不能低于
require
接受的版本,但可以通过冲突解决方案更高,即使更高版本具有独占的上限。这就是直接依赖的含义。该术语支持动态版本。定义后,它将覆盖任何先前的
strictly
声明并清除先前的reject
。
prefer
-
这是一个非常软的版本声明。仅当对该模块的版本没有更强的非动态意见时才适用。该术语不支持动态版本。
定义可以补足
strictly
orrequire
。定义后,它将覆盖任何先前的
prefer
声明并清除先前的reject
。
在级别层次结构之外还有一个附加术语:
reject
-
声明该模块不接受特定版本。如果唯一可选的版本也被拒绝,这将导致依赖性解析失败。该术语支持动态版本。
下表说明了许多用例以及如何组合不同术语以进行丰富版本声明:
该依赖项的哪些版本是可以接受的? | strictly |
require |
prefer |
rejects |
评选结果 |
---|---|---|---|---|---|
使用 version 进行测试 |
1.5 |
从 开始的任何版本 |
|||
经测试 |
[1.0, 2.0[ |
1.5 |
|
||
使用 进行测试 |
[1.0, 2.0[ |
1.5 |
|
||
与上面相同, |
[1.0, 2.0[ |
1.5 |
1.4 |
|
|
没有意见,与 一起工作 |
1.5 |
|
|||
没有意见,更喜欢最新版本。 |
|
构建时的最新版本。 |
|||
在边缘,最新版本,没有降级。 |
|
构建时的最新版本。 |
|||
除了 1.5 之外没有其他版本。 |
1.5 |
1.5,或者如果另一个 |
|||
|
[1.5,1.6[ |
最新 |
使用strictly
,尤其是对于图书馆来说,必须是一个深思熟虑的过程,因为它会对下游消费者产生影响。同时,如果使用得当,它将帮助消费者了解哪些库组合在他们的环境中不能协同工作。有关详细信息,请参阅覆盖依赖项版本。
丰富的版本信息将以 Gradle 模块元数据格式保存。然而,转换为 Ivy 或 Maven 元数据格式将会有损。将发布最高级别,即 |
丰富版本声明是通过version
依赖项或约束声明上的 DSL 方法访问的,该声明允许访问MutableVersionConstraint。
dependencies {
implementation("org.slf4j:slf4j-api") {
version {
strictly("[1.7, 1.8[")
prefer("1.7.25")
}
}
constraints {
add("implementation", "org.springframework:spring-core") {
version {
require("4.2.9.RELEASE")
reject("4.3.16.RELEASE")
}
}
}
}
dependencies {
implementation('org.slf4j:slf4j-api') {
version {
strictly '[1.7, 1.8['
prefer '1.7.25'
}
}
constraints {
implementation('org.springframework:spring-core') {
version {
require '4.2.9.RELEASE'
reject '4.3.16.RELEASE'
}
}
}
}