最簡單的版本宣告是一個代表要使用的版本的簡單字串。Gradle 支援宣告版本字串的不同方式
-
確切版本:例如
1.3
、1.3.0-beta3
、1.0-20150201.131010-1
-
Maven 風格的版本範圍:例如
[1.0,)
、[1.1, 2.0)
、(1.2, 1.5]
-
[
和]
符號表示包含邊界;(
和)
表示排除邊界。 -
當上限或下限遺失時,範圍沒有上限或下限。
-
符號
]
可用來取代(
作為排除下限,而[
可用來取代)
作為排除上限。例如]1.0, 2.0[
-
上限排除作為前綴排除。這表示
[1.0, 2.0[
也會排除所有以2.0
開頭且小於2.0
的版本。例如2.0-dev1
或2.0-SNAPSHOT
等版本將不再包含在範圍內。
-
-
前綴版本範圍:例如
1.
、1.3.
-
只有與
+
之前的部分完全相符的版本會被包含。 -
範圍
+
本身會包含任何版本。
-
-
latest-status
版本:例如latest.integration
、latest.release
-
將比對具有指定狀態的最高版本模組。請參閱 ComponentMetadata.getStatus()。
-
-
Maven
SNAPSHOT
版本識別碼:例如1.0-SNAPSHOT
、1.4.9-beta1-SNAPSHOT
版本排序
版本有內含的排序。版本排序用於
-
確定特定版本是否包含在範圍內。
-
在執行衝突解決時確定哪個版本是「最新」的(但要注意,衝突解決會使用 「基本版本」)。
版本根據下列規則排序
-
每個版本都會分割成其組成「部分」
-
字元
[. - _ +]
用來分隔版本的不同「部分」。 -
任何同時包含數字和字母的部分會分割成各自分開的部分:
1a1 == 1.a.1
-
只會比對版本的各個部分。實際的分隔字元並無意義:
1.a.1 == 1-a+1 == 1.a-1 == 1a1
(但要注意,在衝突解決的脈絡中,有 例外)。
-
-
2 個版本的等效部分會使用下列規則比對
-
如果 2 個部分都是數字,數字值最高者為較高:
1.1
<1.2
-
如果一個部分是數字,則會被視為較高於非數字部分:
1.a
<1.1
-
如果 2 個部分都是非數字,則會以字母順序、大小寫敏感的方式比對:
1.A
<1.B
<1.a
<1.b
-
具有額外數字部分的版本會被視為較高於沒有數字部分的版本(即使是 0):
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")
}
dependencies {
implementation('org.slf4j:slf4j-api:1.7.15')
}
然後版本會被視為 必要版本,這表示它至少應該是 1.7.15
,但可以由引擎升級(樂觀升級)。
不過,有一個簡寫符號表示 嚴格版本,使用 !!
符號
dependencies {
// short-hand notation with !!
implementation("org.slf4j:slf4j-api:1.7.15!!")
// is equivalent to
implementation("org.slf4j:slf4j-api") {
version {
strictly("1.7.15")
}
}
// or...
implementation("org.slf4j:slf4j-api:[1.7, 1.8[!!1.7.25")
// is equivalent to
implementation("org.slf4j:slf4j-api") {
version {
strictly("[1.7, 1.8[")
prefer("1.7.25")
}
}
}
dependencies {
// short-hand notation with !!
implementation('org.slf4j:slf4j-api:1.7.15!!')
// is equivalent to
implementation("org.slf4j:slf4j-api") {
version {
strictly '1.7.15'
}
}
// or...
implementation('org.slf4j:slf4j-api:[1.7, 1.8[!!1.7.25')
// is equivalent to
implementation('org.slf4j:slf4j-api') {
version {
strictly '[1.7, 1.8['
prefer '1.7.25'
}
}
}
無法升級嚴格版本,而且會覆寫此依賴項產生的任何傳遞依賴項。建議對嚴格版本使用範圍。
上述符號 [1.7, 1.8[!!1.7.25
等於
-
嚴格
[1.7, 1.8[
-
偏好
1.7.25
這表示引擎必須選擇 1.7(包含)和 1.8(不包含)之間的版本,而且如果圖表中沒有其他元件需要不同的版本,它應該偏好 1.7.25
。
宣告沒有版本的依賴項
較大型專案的建議做法是宣告沒有版本的依賴項,並使用 依賴項約束 進行版本宣告。優點是依賴項約束讓您可以在一個地方管理所有依賴項的版本,包括傳遞依賴項。
dependencies {
implementation("org.springframework:spring-web")
}
dependencies {
constraints {
implementation("org.springframework:spring-web:5.0.2.RELEASE")
}
}
dependencies {
implementation 'org.springframework:spring-web'
}
dependencies {
constraints {
implementation 'org.springframework:spring-web:5.0.2.RELEASE'
}
}