androidstudio gradle 解決包沖突的方法

exclue :附錄

  1. 去掉全部依賴
 // 依據(jù)構(gòu)建名稱排除
 exclude module: 'cglib' 
 // 依據(jù)組織名稱排除
 exclude group: 'org.jmock' 
 // 依據(jù)組織名稱+構(gòu)件名稱排除
 exclude group: 'org.unwanted', module: 'iAmBuggy' 
eg:
去除support-v4 包的依賴(去掉全部)
  configurations {
     all*.exclude group: 'com.android.support', module: 'support-v4'
 }
  1. 去掉部分沖突
去除 com.github.niorgai:StatusBarCompat:2.1.3 引用的 com.android.support 包下內(nèi)容
 compile('com.github.niorgai:StatusBarCompat:2.1.3', {
       exclude group: 'com.android.support'
   })

 去除 module  引用的 'com.google.code.findbugs:jsr305' 的相關(guān)內(nèi)容
  compile(project(':downlibrary')) {
       exclude group: 'com.google.code.findbugs', module: 'jsr305'
   }

configurations {
   //編譯期排除commons模塊
   compile.exclude module: 'commons'
   //在整個(gè)構(gòu)建過程中排除pkaq.tiger:share
   all*.exclude group: 'pkaq.tiger', module: 'share'
}
  1. 強(qiáng)制依賴某個(gè)版本 包依賴沖突的時(shí)候
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '26.1.0'
            }
        }
    }
}

使用強(qiáng)制版本
  當(dāng)然,有時(shí)候你可能僅僅是需要強(qiáng)制使用某個(gè)統(tǒng)一的依賴版本,而不是排除他們的烁,那么此時(shí)force就該登場(chǎng)了采幌。指定force = true屬性可以沖突時(shí)優(yōu)先使用該版本進(jìn)行解決螺男。

compile('org.hibernate:hibernate:3.1') {
    force = true
}

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

configurations.all {
   resolutionStrategy {
       force 'org.hamcrest:hamcrest-core:1.3'
   }
}

轉(zhuǎn)載:https://blog.csdn.net/pkaq_/article/details/53906668


什么是傳遞依賴
  在Maven倉(cāng)庫(kù)中华望,構(gòu)件通過POM(一種XML文件)來描述相關(guān)信息以及傳遞性依賴丈秩。Gradle 可以通過分析該文件獲取獲取所以依賴以及依賴的依賴和依賴的依賴的依賴希停,為了更加直觀的表述烁巫,可以通過下面的輸出結(jié)果了解。

+--- org.springframework:spring-web:4.3.4.RELEASE
|    |    +--- org.springframework:spring-aop:4.3.4.RELEASE
|    |    +--- org.springframework:spring-beans:4.3.4.RELEASE
|    |    +--- org.springframework:spring-context:4.3.4.RELEASE
|    |    \--- org.springframework:spring-core:4.3.4.RELEASE

  可以看到宠能,我們的項(xiàng)目依賴了spring-web亚隙,然而spirng-web卻依賴了一眾spring的全家桶,借助Gradle的傳遞性依賴特性违崇,你無需再你的腳本中把這些依賴都聲明一遍阿弃,你只需要簡(jiǎn)單的一行诊霹,Gradle便會(huì)幫你將傳遞性依賴一起下載下來。

compile `org.springframework:spring-web:4.3.4.RELEASE`
1
 傳遞依賴特性可以輕松地通過transitive參數(shù)進(jìn)行開啟或關(guān)閉恤浪,上面的示例中如果要忽略spring-web的傳遞性依賴可以采用指定 transitive = false 的方式來關(guān)閉依賴傳遞特性畅哑,也可以采用添加@jar的方式忽略該依賴的所有傳遞性依賴。

compile("org.springframework:spring-web:4.3.4.RELEASE") {
    transitive = false
}

compile `org.springframework:spring-web:4.3.4.RELEASE@jar`
1
下面的語(yǔ)句水由,可以全局性的關(guān)閉依賴傳遞特性荠呐。

configurations.all {
   transitive = false
}

排除依賴
   有些時(shí)候你可能需要排除一些傳遞性依賴中的某個(gè)模塊,此時(shí)便不能靠單純的關(guān)閉依賴傳遞特性來解決了砂客。這時(shí)exclude就該登場(chǎng)了泥张,如果說@jar徹底的解決了傳遞問題,那么exclude則是部分解決了傳遞問題鞠值。然而實(shí)際上exclude肯能還會(huì)用的頻率更更頻繁一些媚创,比如下面幾種情況。

依賴沖突時(shí)彤恶,如果有兩個(gè)依賴引用了相同jar包的不同版本時(shí)钞钙,默認(rèn)情況下gradle會(huì)采用最新版本的jar包,此時(shí)可以通過排除選項(xiàng)來排除声离。
運(yùn)行期無需此模塊的芒炼。
無法正常獲取到此傳遞依賴,遠(yuǎn)程倉(cāng)庫(kù)都不存在的术徊。
版權(quán)原因需要排除的本刽。
其他原因。
可以通過configuration配置或者在依賴聲明時(shí)添加exclude的方式來排除指定的引用赠涮。

  exclude可以接收group和module兩個(gè)參數(shù)子寓,這兩個(gè)參數(shù)可以單獨(dú)使用也可以搭配使用,其中module可以理解為對(duì)應(yīng)GAV中的artifactId笋除,也就是compile group: 'org.gradle.test.classifiers', name: 'service', version: '1.0'中的中間name部分斜友。

configurations {
    //編譯期排除commons模塊
    compile.exclude module: 'commons'
    //在整個(gè)構(gòu)建過程中排除pkaq.tiger:share
    all*.exclude group: 'pkaq.tiger', module: 'share'
}

dependencies {
    compile("pkaq.tiger:web:1.0") {
        exclude module: 'share'
    }       
}

使用強(qiáng)制版本
  當(dāng)然,有時(shí)候你可能僅僅是需要強(qiáng)制使用某個(gè)統(tǒng)一的依賴版本垃它,而不是排除他們鲜屏,那么此時(shí)force就該登場(chǎng)了。指定force = true屬性可以沖突時(shí)優(yōu)先使用該版本進(jìn)行解決嗤瞎。

compile('org.hibernate:hibernate:3.1') {
    force = true
}

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

configurations.all {
   resolutionStrategy {
       force 'org.hamcrest:hamcrest-core:1.3'
   }
}

使用動(dòng)態(tài)版本
  如果你想讓你的工程始終采用最新依賴墙歪,那么Gradle提供了一種方式可以始終保證采用依賴的最新版本而無需每次手工檢查修改版本。 
  使用加號(hào)+,可以讓Gradle在每次執(zhí)行構(gòu)建時(shí)檢查遠(yuǎn)程倉(cāng)庫(kù)是否存在該依賴的新版本贝奇,如果存在新版本則下載選用最新版本虹菲。當(dāng)然也可以指定依賴某個(gè)大版本下的最新子版本,1.+表示始終采用該依賴最新的1.x版本的最新依賴掉瞳。

compile 'org.springframework:spring-web:+'
1
雖然這是看上去十分風(fēng)騷的一種用法毕源,但這無疑會(huì)降低你系統(tǒng)構(gòu)建的速度同時(shí)提高構(gòu)建失敗的風(fēng)險(xiǎn)浪漠。因?yàn)镚radle不得不每次檢查遠(yuǎn)程倉(cāng)庫(kù)是否存在最新版本,同時(shí)新版本也可能帶來無法預(yù)知的兼容性問題霎褐,比如quartz2.x較之于quartz1.x,common-lang3較之于common-lang等址愿。

一個(gè)綜合示例
compile('org.hibernate:hibernate:3.1') {
 // 沖突時(shí)優(yōu)先使用該版本
 force = true

 // 依據(jù)構(gòu)建名稱排除
 exclude module: 'cglib' 
 // 依據(jù)組織名稱排除
 exclude group: 'org.jmock' 
 // 依據(jù)組織名稱+構(gòu)件名稱排除
 exclude group: 'org.unwanted', module: 'iAmBuggy' 

 // 為本依賴關(guān)閉依賴傳遞特性
 transitive = false
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冻璃,隨后出現(xiàn)的幾起案子响谓,更是在濱河造成了極大的恐慌,老刑警劉巖省艳,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娘纷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡跋炕,警方通過查閱死者的電腦和手機(jī)赖晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辐烂,“玉大人遏插,你說我怎么就攤上這事【佬蓿” “怎么了胳嘲?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)分瘾。 經(jīng)常有香客問我胎围,道長(zhǎng)吁系,這世上最難降的妖魔是什么德召? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮汽纤,結(jié)果婚禮上上岗,老公的妹妹穿的比我還像新娘。我一直安慰自己蕴坪,他們只是感情好肴掷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著背传,像睡著了一般呆瞻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上径玖,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天痴脾,我揣著相機(jī)與錄音,去河邊找鬼梳星。 笑死赞赖,一個(gè)胖子當(dāng)著我的面吹牛滚朵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播前域,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼辕近,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了匿垄?” 一聲冷哼從身側(cè)響起移宅,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椿疗,沒想到半個(gè)月后吞杭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡变丧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年芽狗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痒蓬。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡童擎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攻晒,到底是詐尸還是另有隱情顾复,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布鲁捏,位于F島的核電站芯砸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏给梅。R本人自食惡果不足惜假丧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望动羽。 院中可真熱鬧包帚,春花似錦、人聲如沸运吓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拘哨。三九已至谋梭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倦青,已是汗流浹背瓮床。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纤垂。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓矾策,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親峭沦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贾虽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容