宣告豐富版本
Gradle 支援豐富的模型來宣告版本,這允許結合不同層級的版本資訊。以下說明這些術語及其意義,從最強到最弱
strictly
-
任何與此版本表示法不匹配的版本都將被排除。這是最強的版本宣告。在已宣告的相依性上,
strictly
可以降級版本。在傳遞相依性上,如果無法選取此子句可接受的版本,它將導致相依性解析失敗。請參閱 覆寫相依性版本 以取得詳細資訊。此術語支援動態版本。定義時,這將覆寫任何先前的
require
宣告,並清除先前的reject
。
require
-
表示選取的版本不能低於
require
接受的版本,但可以透過衝突解決而更高,即使較高版本具有獨佔的上限。這是直接相依性轉換的結果。此術語支援動態版本。定義時,這將覆寫任何先前的
strictly
宣告,並清除先前的reject
。
prefer
-
這是一個非常軟的版本宣告。它僅在沒有針對模組版本更強的非動態意見時才適用。此術語不支援動態版本。
定義可以補充
strictly
或require
。定義時,這會覆寫任何先前的
prefer
宣告,並清除先前的reject
。
層級結構之外還有一個額外的術語
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 模組元資料格式保留。然而轉換成 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'
}
}
}
}