Declaring Rich Versions
Gradle支持用于声明版本的丰富模型,该模型允许组合不同级别的版本信息. 术语及其含义如下(从最强到最弱):
strictly
-
与该版本符号不匹配的任何版本将被排除. 这是最强的版本声明. 在声明的依赖项上,
strictly
可以降级版本. 在传递依赖项上,如果无法选择此子句可接受的版本,则将导致依赖项解析失败. 有关详细信息,请参见覆盖依赖项版本 . 该术语支持动态版本.定义后,将覆盖先前的
require
声明并清除先前的reject
.
require
-
表示所选版本不能低于
require
接受的版本,但通过冲突解决可以更高,即使更高版本具有排他性更高的界限. 这就是依赖项上的直接版本所转换的内容. 该术语支持动态版本.定义后,将覆盖先前的
strictly
声明并清除先前的reject
.
prefer
-
这是一个非常软的版本声明. 仅当对该模块的版本没有更强的非动态观点时,才适用. 该术语不支持动态版本.
定义可以
strictly
补充或require
.
在级别层次结构之外还有一个附加术语:
reject
-
声明模块不接受特定版本. 如果唯一的可选版本也被拒绝,这将导致依赖项解析失败. 该术语支持动态版本.
下表说明了许多用例以及如何组合不同的术语以进行丰富版本声明:
可以使用哪个版本的依存关系? | strictly |
require |
prefer |
rejects |
选择结果 |
---|---|---|---|---|---|
经过 |
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 Module元数据格式保存. 但是,转换为Ivy或Maven元数据格式将是有损的. 最高级别的发表会,这是 |
通过version
DSL方法在依赖项或约束声明中访问富版本声明,该声明提供对MutableVersionConstraint的访问.
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'
}
}
}
}
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")
}
}
}
}