[英]Android Gradle - transitive dependencies take precedence (upgrade) the declared (first-level) one
我的build.gradle
中有什么:
implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation 'com.github.kirich1409:viewbindingpropertydelegate-noreflection:1.5.6'
后一個依賴有自己的RecyclerView
傳遞依賴:
implementation "androidx.recyclerview:recyclerview:1.2.1"
然后我在依賴樹中看到的是(對於我聲明的RecyclerView
依賴):
+--- androidx.recyclerview:recyclerview:1.1.0 -> 1.2.1
另外,在代碼中,我得到了getBindingAdapterPosition
方法,它是在1.1.0之后出現的。
當然,我們應該始終嘗試使用最新版本的依賴項,但這是正確的行為嗎?!
我認為傳遞依賴不會覆蓋聲明的依賴。
如果我的代碼僅依賴於 1.1.0 版中的某些功能怎么辦?
文檔中描述了默認行為:
Gradle 通過選擇在依賴圖中找到的最新版本來解決任何依賴版本沖突。
您可以強制執行特定版本的傳遞依賴項,不包括依賴項。 就像是:
implementation('commons-beanutils:commons-beanutils:1.9.4') {
exclude group: 'commons-collections', module: 'commons-collections'
}
但請注意:
完全排除依賴項需要有意識的決定。 如果外部庫在沒有它們的情況下不能正確 function ,則排除傳遞依賴可能會導致運行時錯誤。 如果您使用排除項,請確保您沒有通過足夠的測試覆蓋率使用任何需要排除依賴項的代碼路徑。
即使傳遞依賴項另有說明,您也可以使用嚴格版本。 就像是:
implementation('commons-codec:commons-codec') {
version {
strictly '1.9'
}
}
同樣在這種情況下,請注意:
強制一個版本的依賴項需要一個有意識的決定。 如果外部庫在沒有它們的情況下不能正確 function ,則更改傳遞依賴項的版本可能會導致運行時錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.