aez*_*aez 34 android build.gradle android-gradle-plugin
我不能使用"exclude"在build.gradle文件中排除guava模块.
使用此依赖项块:
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!!!
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我得到下面的依赖树.请注意,不排除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
Run Code Online (Sandbox Code Playgroud)
...
请注意,最后一行仍包含番石榴模块,尚未排除.为什么?如何排除它?
aez*_*aez 32
问题是另一个编译对象也依赖于将guava-jdk5作为传递依赖的第一级依赖,因此这个其他对象引入了不需要的模块.
我终于可以看到这个了
./gradlew -q :app:dependencyInsight --dependency guava --configuration compile
Run Code Online (Sandbox Code Playgroud)
并可以使用它排除它
configurations {
compile.exclude module: 'guava-jdk5'
}
Run Code Online (Sandbox Code Playgroud)
yvo*_*olk 19
这个问题的作者的回答没有帮助我,因为它太狭隘/具体.这是一种经过修改的方法,适用于排除任何模块:
使用"终端"中的此命令检查当前识别的依赖项:
gradlew app:dependencies
Run Code Online (Sandbox Code Playgroud)该命令是从项目的根目录发出的,此处的"app"应替换为应用程序"模块"的名称.
您也可以在应用程序的文件夹中进行cd并启动它:
..\gradlew -q dependencies
Run Code Online (Sandbox Code Playgroud)
注意:../gradle在Linux上使用.
您将看到存在多个配置,而不仅仅是"编译"(例如"_debugCompile"等).每个"配置"都有自己的依赖关系!这就是为什么例如在"编译"配置中排除某些内容可能是不够的.
现在以这种方式对所有"配置"应用排除:将此块添加到应用程序的("模块")gradle.build文件(当前要排除的模块列表:-)):
configurations {
all {
exclude module: 'httpclient'
exclude module: 'httpcore'
}
}
Run Code Online (Sandbox Code Playgroud)
提示:有关排除案例的讨论,例如:https://discuss.gradle.org/t/how-do-i-exclude-specific-transitive-dependencies-of-something-i-depend-on/17991/7
重复步骤1.和2.直到在任何配置的依赖关系列表中都没有看到要排除的模块.
提示:在这里,在"所有"区块内,您可以决定放置:
transitive = false
Run Code Online (Sandbox Code Playgroud)
你将摆脱所有传递依赖.
| 归档时间: |
|
| 查看次数: |
21964 次 |
| 最近记录: |