我无法使用"排除"在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
...
请注意,最后一行仍包含番石榴模块,尚未排除。为什么?如何排除它?
答案 0 :(得分:32)
问题是另一个编译对象也依赖于将guava-jdk5作为传递依赖的第一级依赖,因此这另一个对象引入了不需要的模块。
我终于可以使用
看到这一点./gradlew -q :app:dependencyInsight --dependency guava --configuration compile
可以使用
排除它configurations {
compile.exclude module: 'guava-jdk5'
}
答案 1 :(得分:19)
问题作者的回答并没有帮助我,因为它太狭隘/具体。 这是一种经过修改的方法,适用于排除任何模块:
使用“终端”中的此命令检查当前识别的依赖项:
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
你将摆脱所有传递依赖。