exclue :附錄
- 去掉全部依賴
// 依據(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'
}
- 去掉部分沖突
去除 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'
}
- 強(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
}