声明 Rich 版本
Gradle 支持用于声明版本的丰富模型,该模型允许组合不同级别的版本信息。术语及其含义如下所示,从最强到最弱
strictly
-
此版本表示法不匹配的任何版本都将被排除。这是最严格的版本声明。对于声明的依赖项,
strictly
可以降级版本。当在传递依赖项上时,如果无法选择此子句可接受的版本,它将导致依赖项解析失败。有关详细信息,请参阅覆盖依赖项版本。此术语支持动态版本。定义时,这将覆盖任何先前的
require
声明并清除先前的reject
。
require
-
这意味着所选版本不能低于
require
接受的版本,但可以通过冲突解决提高版本,即使更高的版本具有排他性的更高边界。这是直接依赖项转换后的结果。此术语支持动态版本。定义时,这将覆盖任何先前的
strictly
声明并清除先前的reject
。
prefer
-
这是一个非常软的版本声明。仅当模块没有更强的不动态版本意见时才适用。此术语不支持动态版本。
定义可以补充
strictly
或require
。定义时,这将覆盖任何先前的
prefer
声明并清除先前的reject
。
级别层次结构之外还有一个附加术语
拒绝
-
声明模块不接受特定版本。如果可选择的唯一版本也被拒绝,这将导致依赖项解析失败。此术语支持动态版本。
下表说明了许多用例,以及如何组合不同的术语以进行丰富的版本声明
此依赖项的哪些版本可以接受? | strictly |
require |
prefer |
拒绝 |
选择结果 |
---|---|---|---|---|---|
使用版本 |
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'
}
}
}
}