下面是我的build.gradle的一个片段:
compile 'com.google.api-client:google-api-client:1.19.0'
compile 'com.google.apis:google-api-services-oauth2:v2-rev77-1.19.0'
compile 'com.google.apis:google-api-services-plus:v1-rev155-1.19.0'
compile 'com.google.appengine.tools:appengine-gcs-client:0.4.1'
compile 'com.google.appengine.tools:appengine-mapreduce:0.8'它导入多个版本的番石榴,如您在dependencyInsight中看到的那样:
com.google.guava:guava:15.0 (conflict resolution)
com.google.guava:guava:14.0.1 -> 15.0
+--- com.googlecode.objectify:objectify:4.1.3
| \--- default
\--- net.eusashead.spring:spring-cache-gae:1.0.0.RELEASE
\--- default
com.google.guava:guava:[15.0,15.99] -> 15.0
+--- com.google.appengine.tools:appengine-gcs-client:0.4.1
| +--- default
| +--- com.google.appengine.tools:appengine-mapreduce:0.8
| | \--- default
| \--- com.google.appengine.tools:appengine-pipeline:0.2.10
| \--- com.google.appengine.tools:appengine-mapreduce:0.8 (*)
+--- com.google.appengine.tools:appengine-mapreduce:0.8 (*)
\--- com.google.appengine.tools:appengine-pipeline:0.2.10 (*)
com.google.guava:guava-jdk5:13.0
\--- com.google.api-client:google-api-client:1.19.0
+--- default
+--- com.google.apis:google-api-services-oauth2:v2-rev77-1.19.0
| \--- default
+--- com.google.apis:google-api-services-plus:v1-rev155-1.19.0
| \--- default
+--- com.google.appengine.tools:appengine-gcs-client:0.4.1
| +--- default
| +--- com.google.appengine.tools:appengine-mapreduce:0.8
| | \--- default
| \--- com.google.appengine.tools:appengine-pipeline:0.2.10
| \--- com.google.appengine.tools:appengine-mapreduce:0.8 (*)
+--- com.google.api-client:google-api-client-appengine:1.17.0-rc
| \--- com.google.appengine.tools:appengine-gcs-client:0.4.1 (*)
+--- com.google.apis:google-api-services-storage:v1-rev1-1.18.0-rc
| \--- com.google.appengine.tools:appengine-gcs-client:0.4.1 (*)
+--- com.google.apis:google-api-services-bigquery:v2-rev154-1.19.0
| \--- com.google.appengine.tools:appengine-mapreduce:0.8 (*)
\--- com.google.api-client:google-api-client-servlet:1.17.0-rc
\--- com.google.api-client:google-api-client-appengine:1.17.0-rc (*)
(*) - dependencies omitted (listed previously)通过执行以下操作,我尝试将依赖项删除为:
compile ('com.google.api-client:google-api-client:1.19.0'){
exclude group: 'com.google.guava', module: 'guava-jdk5'
}
compile ('com.google.api-client:google-api-client:1.19.0'){
exclude group: 'com.google.guava',
}但dependencyInsight保持不变。我也试过
compile ('com.google.guava:guava:15.0'){force = true}但是,依赖洞察力仍然是一样的。我如何摆脱com.google.guava:番石榴-jdk5 5:13.0?
详细信息:我已经在windows 8.1框上试用了gradle 1.2和2.1
我尝试这样做的原因是为了摆脱这个异常:
java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;发布于 2014-10-11 17:41:04
原来番石榴-jdk5 5还在维护中。
所以我改变了这个:
compile ('com.google.guava:guava:15.0'){force = true}为此:
compile('com.google.guava:guava-jdk5:17.0') { force = true }这解决了我的问题,我现在可以使用Google项目中“com.google.common”包中的类和所有描述的依赖项
发布于 2014-11-20 16:21:06
如果某个地方有另一个依赖项指向相同的依赖项而没有任何排除项,则似乎不会排除该依赖项。
但是,您可以通过configuration排除依赖关系:
configurations {
all*.exclude group: 'com.google.guava', module:'guava-jdk5'
}发布于 2017-08-10 20:15:30
基于@thoutbeckers的回答,因为有一个特殊的案例,我不认为他的答案适用,但它确实适用。希望这个答案能帮助那些分享我的特例问题的人。最初,我认为坏的传递依赖仅由build.gradle文件中的一个依赖项引用,但实际上由两个依赖项引用。这是因为引用不良传递依赖关系的两个依赖项都有父/子关系,但我只注意到了与子依赖的关系,而没有注意到父依赖关系。
考虑以下依赖树(由命令gradle :dependencies生成):
compileClasspath - Compile classpath for source set 'main'.
+--- my.org:com.my.pkg.parent:6.+ -> 6.0.4
| +--- # misc. dependencies
| +--- my.org:com.my.pkg.child:6.0.4
| | +--- # misc. dependencies
| | +--- other.org:bad.transitive.dependency:0.9.1 FAILED
| | +--- # misc. dependencies
| |--- # misc. dependencies
+--- # misc. dependencies从依赖树看,other.org:bad.transitive:dependency:0.9.1只由构建文件中的一个依赖项引用,而不是两个。但是,假设您的Gradle文件如下所示:
// ... misc. ...
dependencies {
// ... misc. dependencies ...
compile 'my.org:com.my.pkg.parent:6.+'
// ... misc. dependencies ...
compile ('my.org:com.my.pkg.child:6.0.4') {
exclude group: 'other.org', module: 'bad.transitive.dependency'
}对于上面这样的Gradle文件,即使您想要排除的传递依赖只发生在子依赖中,而不是父依赖项中,错误仍然存在。但是,由于父项目和子项目都由build.gradle文件引用,因此必须从两个依赖项中排除不良的传递依赖项,如上面所述的@thoutbeckers。
请注意,如果不希望在配置级别添加排除(如@thoutbeckers在其答复中所示),则始终可以显式地从引用它的两个依赖项中排除传递依赖项。
https://stackoverflow.com/questions/25792398
复制相似问题