什么是傳遞依賴
假設(shè)我們有項目, ProjectA, ProjectB 和 ProjectC, 此時, A依賴B, B依賴C, 那么這種依賴就是傳遞依賴
查看依賴關(guān)系
gradle dependencies
->
jasper
\--- org.apache.tomcat.embed:tomcat-embed-jasper:9.0.2
+--- org.apache.tomcat.embed:tomcat-embed-core:9.0.2
| \--- org.apache.tomcat:tomcat-annotations-api:9.0.2
+--- org.apache.tomcat.embed:tomcat-embed-el:9.0.2
\--- org.eclipse.jdt:ecj:3.12.3
常見的依賴配置修改
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
jasper('org.apache.tomcat.embed:tomcat-embed-jasper:9.0.2') {
force = true // 沖突時優(yōu)先使此該版本
transitive = false // 關(guān)閉依賴傳遞
exclude module: 'support-v4' // 根據(jù)構(gòu)建名稱排除
exclude group: 'com.android.support' // 根據(jù)組織名稱排除
exclude group: 'com.android.support', module: 'support-v4' // 根據(jù)組織名稱+構(gòu)件名排除
}
}
關(guān)閉全局傳遞依賴
configurations.all {
transitive = false
}
打印依賴庫位置
例如上面的例子, 我們打印出當(dāng)前依賴jar的位置
task printDependencies {
configurations.getByName('jasper').each {
dependency -> println dependency
}
//由于默認(rèn)testImplementation的resloved 是false, 所以我們可以將它設(shè)置為true在進(jìn)行訪問
configurations.testImplementation.setCanBeResolved(true)
configurations.testImplementation.each {
dependency -> println dependency
}
}