【Gradle声明版本系列】声明版本和范围
版本排序
版本有一个隐式的排序。版本排序用于:
- 确定特定版本是否包含在范围内。
- 在执行冲突解决时确定哪个版本是“最新”的(但要注意,冲突解决使用"基础版本")。
版本根据以下规则进行排序:
- 每个版本被拆分为其组成部分:
- 字符 [. - _ +] 用于分隔版本的不同"部分"。
- 包含数字和字母的任何部分都会被拆分为单独的部分:1a1 == 1.a.1
- 只比较版本的部分,实际的分隔符字符并不重要:1.a.1 == 1-a+1 == 1.a-1 == 1a1(但要注意,在冲突解决的上下文中,此规则有例外)。
- 比较两个版本的等效部分使用以下规则:
- 如果两个部分都是数字,则最高的数字值较高:1.1 < 1.2
- 如果一个部分是数字,则它被认为比非数字部分更高:1.a < 1.1
- 如果两个部分都是非数字,则按字母顺序进行比较,区分大小写:1.A < 1.B < 1.a < 1.b
- 版本的额外数值部分被认为比没有的版本更高(即使它是零):1.1 < 1.1.0
- 版本的额外非数字部分被认为比没有的版本更低:1.1.a < 1.1
- 某些非数字部分对于排序具有特殊意义:
- dev 被认为比任何其他非数字部分更低:1.0-dev < 1.0-ALPHA < 1.0-alpha < 1.0-rc。
- 字符串 rc、snapshot、final、ga、release 和 sp 被认为比任何其他字符串部分更高(按此顺序排序):1.0-zeta < 1.0-rc < 1.0-snapshot < 1.0-final < 1.0-ga < 1.0-release < 1.0-sp < 1.0。
- 这些特殊值不区分大小写,与常规字符串部分相反,并且它们不依赖于其周围使用的分隔符:1.0-RC-1 == 1.0.rc.1
简单版本声明语义
当您使用简写表示法声明版本时,例如:
dependencies {
implementation('org.slf4j:slf4j-api:1.7.15')
}
那么该版本被视为必需版本,这意味着它至少应为 1.7.15,但可以由引擎进行升级(乐观升级)。
但是,还有一种用于严格版本的简写表示法,使用 !!
符号:
dependencies {
// 使用 !! 的简写表示法
implementation('org.slf4j:slf4j-api:1.7.15!!')
}
严格版本无法升级,并覆盖此依赖项提供的任何源自此依赖项的传递性依赖项。对于严格版本,建议使用范围。
声明无版本的依赖关系
对于较大的项目,推荐的做法是声明没有版本的依赖关系,并使用依赖关系约束进行版本声明。这样可以在一个地方管理所有依赖关系的版本,包括传递性依赖关系。
dependencies {
implementation 'org.springframework:spring-web'
}
dependencies {
constraints {
implementation 'org.springframework:spring-web:5.0.2.RELEASE'
}
}
以上是关于声明版本和范围的内容。
ork:spring-web:5.0.2.RELEASE’
}
}
以上是关于声明版本和范围的内容。
## [参考链接](https://docs.gradle.org/current/userguide/single_versions.html)