[英]Gradle won't exclude a module as requested
我無法使用“ exclude”在build.gradle文件中排除番石榴模塊。
使用此依賴關系塊:
dependencies {
...
compile(group: 'com.google.api-client', name: 'google-api-client', version: '1.19.0') {
exclude(group: 'com.google.guava', module: 'guava-jdk5') // !!! Doesn't work!!!
...
}
...
}
我在下面得到了依賴樹。 請注意,不排除guava-jdk5。
+--- com.google.api-client:google-api-client:1.19.0
| +--- com.google.oauth-client:google-oauth-client:1.19.0
| | +--- com.google.http-client:google-http-client:1.19.0
| | | ...
| | \--- com.google.code.findbugs:jsr305:1.3.9
| ...
| \--- com.google.guava:guava-jdk5:13.0
...
請注意,最后一行仍包含guava模塊,尚未排除它。 為什么? 如何排除呢?
問題在於,另一個編譯對象還依賴於具有guava-jdk5作為傳遞依賴關系的第一級依賴關系,因此,該另一個對象正在引入不需要的模塊。
我終於能夠看到使用
./gradlew -q :app:dependencyInsight --dependency guava --configuration compile
並可以使用排除它
configurations {
compile.exclude module: 'guava-jdk5'
}
問題作者的回答沒有幫助我,因為它太狹窄/具體。 這是一種修改的方法,適用於排除任何模塊:
使用“終端”中的此命令檢查當前識別的依賴項:
gradlew app:dependencies
該命令從項目的根目錄發出,此處的“ app”應替換為應用程序“模塊”的名稱。
您也可以在應用程序的文件夾內cd並啟動此程序:
..\gradlew -q dependencies
注意:在Linux上使用../gradle
。
您將看到存在幾種配置,而不僅僅是“編譯”(例如“ _debugCompile”等)。 每個“配置”都有自己的依賴性! 這就是為什么僅排除“編譯”配置中的內容可能不夠的原因。
現在,以這種方式將排除應用於所有“配置”:將此塊添加到應用程序的(“模塊”)gradle.build文件中(當然要包括要排除的模塊列表):
configurations { all { exclude module: 'httpclient' exclude module: 'httpcore' } }
提示:例如,在此處討論了高級排除案例: https : //discuss.gradle.org/t/how-do-i-exclude-specific-transitive-dependencies-of-something-i-depend-on/17991/7
重復步驟1.和2.,直到在任何配置的依賴項列表中看不到要排除的模塊。
提示:在這里,您可以決定在“所有”塊中放置:
transitive = false
您將擺脫所有傳遞依賴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.