Gradle依賴--管理依賴的版本

Gradle命令

打開AndroidStudio的Terminal(windows環(huán)境下),輸入下面命令:

 gradlew :app:dependencies --configuration compile //查看編譯時依賴樹
 gradle dependencies -configuration runtime //查看運行時依賴樹
gradle dependencies //查看所有依賴庫

什么是傳遞依賴

在Maven倉庫中,構件通過POM(一種XML文件)來描述相關信息以及傳遞性依賴。Gradle 可以通過分析 該文件獲取獲取所以依賴以及依賴的依賴和依賴的依賴的依賴,為了更加直觀的表述,可以通過下面的輸出 結(jié)果了解。

依賴樹結(jié)構.png

可以看到,我們的項目依賴了com.android.support-v4包,然而com.android.support-v4包卻依賴了一眾support的全家桶,借助Gradle的傳遞性依賴特性,你無需再你的腳本中把這些依賴都聲明一遍,你只需要簡單的一行,Gradle便會幫你將傳遞性依賴一起下載下來。

傳遞依賴特性可以輕松地通過transitive參數(shù)進行開啟或關閉,上面的示例中如果要忽略com.android.support-v4的傳遞性依賴可以采用指定 transitive = false 的方式來關閉依賴傳遞特性,也可以采用添加@jar的方式忽略該依賴的所有傳遞性依賴。

 compile('com.android.support:support-v4:23.1.1'){
        transitive = false
 }
 compile 'com.android.support:support-v4:23.1.1'@jar

當然,你也可以全局性的關閉依賴的傳遞特性。

 configurations.all {
   transitive = false
}

排除依賴

有些時候你可能需要排除一些傳遞性依賴中的某個模塊,此時便不能靠單純的關閉依賴傳遞特性來解決了。這時exclude就該登場了,如果說@jar徹底的解決了傳遞問題,那么exclude則是部分解決了傳遞問題。然而實際上exclude肯能還會用的頻率更更頻繁一些,比如下面幾種情況。

可以通過configuration配置或者在依賴聲明時添加exclude的方式來排除指定的引用。

exclude可以接收group和module兩個參數(shù),這兩個參數(shù)可以單獨使用也可以搭配使用,具體理解如下:

compile('com.github.nanchen2251:CompressHelper:1.0.5'){
        //com.android.support:appcompat-v7:23.1.1
        exclude group: 'com.android.support'//排除組織依賴
        exclude module: 'appcompat-v7'//排除模塊依賴
 }

強制使用版本

當然,有時候你可能僅僅是需要強制使用某個統(tǒng)一的依賴版本,而不是排除他們,那么此時force就該登場了。指定force = true屬性可以沖突時優(yōu)先使用該版本進行解決。

compile('com.github.nanchen2251:CompressHelper:1.0.5'){
        force = true
 }

全局配置強制使用某個版本的依賴來解決依賴沖突中出現(xiàn)的依賴

configurations.all {
   resolutionStrategy {
       force 'com.github.nanchen2251:CompressHelper:1.0.5'
   }
}

使用動態(tài)版本

如果你想讓你的工程始終采用最新依賴,那么Gradle提供了一種方式可以始終保證采用依賴的最新版本而無需每次手工檢查修改版本。

使用加號+,可以讓Gradle在每次執(zhí)行構建時檢查遠程倉庫是否存在該依賴的新版本,如果存在新版本則下載選用最新版本。當然也可以指定依賴某個大版本下的最新子版本,1.+表示始終采用該依賴最新的1.x版本的最新依賴。

  compile 'com.android.support:support-v4:+'//下載最新
  compile 'com.android.support:support-v4:23+'//基于23這個版本最新
  • 雖然這是看上去十分風騷的一種用法,但這無疑會降低你系統(tǒng)構建的速度同時提高構建失敗的風險。因為Gradle不得不每次檢查遠程倉庫是否存在最新版本,同時新版本也可能帶來無法預知的兼容性問題。

一個綜合案例

compile('com.github.nanchen2251:CompressHelper:1.0.5') {
   // 沖突時優(yōu)先使用該版本
   force = true

   // 依據(jù)構建名稱排除
   exclude module: 'CompressHelper' 
   // 依據(jù)組織名稱排除
   exclude group: 'com.github.nanchen2251' 
   // 依據(jù)組織名稱+構件名稱排除
   exclude group: 'com.github.nanchen2251', module: 'CompressHelper' 

   // 為本依賴關閉依賴傳遞特性
   transitive = false
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,555評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,039評論 25 709
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • 我是全職媽媽,兒子現(xiàn)在快五周歲了。他從出生到現(xiàn)在上幼兒園,基本都是我一個人照顧。孩子的思維有時真的和我們成年人不一...
    會飛的魚5831閱讀 446評論 0 3
  • 文/卡蘭諾 我奶奶幾歲時父母就早亡,是靠伯父母養(yǎng)大的。解放前,結(jié)婚早,十多歲就嫁給我的爺爺。跟我爺爺沒少吃苦...
    卡蘭諾閱讀 513評論 3 5

友情鏈接更多精彩內(nèi)容