當同一個程式庫被多次宣告,或當兩個不同的程式庫提供相同的功能時,可能會在相依性解析期間發生衝突。
了解衝突類型
在相依性解析期間,Gradle 處理兩種衝突類型
-
版本衝突:亦即當兩個或多個相依性需要給定的模組,但版本不同時。
-
功能衝突:亦即當相依性圖形包含多個提供相同功能的成品時。
解決版本衝突
當一個元件宣告了兩個相依性,而這兩個相依性
-
相依於同一個模組,例如
com.google.guava:guava
-
但版本不同,例如
20.0
和25.1-android
-
我們的專案本身相依於
com.google.guava:guava:20.0
-
我們的專案也相依於
com.google.inject:guice:4.2.2
,而後者本身相依於com.google.guava:guava:25.1-android
-
Gradle 將考慮所有請求的版本,無論它們出現在相依性圖形中的哪個位置。預設情況下,它將選擇這些版本中最高的版本。
解決功能衝突
Gradle 使用屬性和功能來識別元件提供哪些成品。當相依性圖形中的兩個或多個元件變體宣告相同的功能時,就會發生功能衝突。
Gradle 通常會使建置失敗並報告衝突。
您可以透過在 resolutionStrategy
區塊中指定要使用的功能來手動解決衝突
configurations.configureEach {
resolutionStrategy.capabilitiesResolution.withCapability("com.example:logging") {
selectHighestVersion()
}
}