Android gradle插件。如何自动排除重复的可传递依赖项

Android gradle插件。如何自动排除重复的可传递依赖项,android,gradle,Android,Gradle,更新android build tools插件至0.14.1后,如果发现我的构建被重复类在索引时崩溃。经过一些调查,我在libraryList.txt中的不同commons io JAR中找到了它 一个是我添加的依赖项2.4,另一个是来自robospice的1.3。在1.3版本之后,构建成功。然而 +--- com.octo.android.robospice:robospice:1.4.14 | \--- com.octo.android.robospice:robospice-cach

更新android build tools插件至0.14.1后,如果发现我的构建被重复类在索引时崩溃。经过一些调查,我在libraryList.txt中的不同commons io JAR中找到了它

一个是我添加的依赖项2.4,另一个是来自robospice的1.3。在1.3版本之后,构建成功。然而

+--- com.octo.android.robospice:robospice:1.4.14
|    \--- com.octo.android.robospice:robospice-cache:1.4.14
|         +--- org.apache.commons:commons-lang3:3.3.2
|         \--- org.apache.commons:commons-io:1.3.2
|              \--- commons-io:commons-io:1.3.2 -> 2.4  

格雷德尔不应该取代它吗?commons io:commons io:1.3.2->2.4默认情况下,我是否错误地期望这种行为,或者它只是android构建工具中的一个bug?

这不是一个依赖项解决问题。如果robospice库的jar中包含commons io v1.3.2的副本,那么如果您在主构建脚本中引用较新版本的commons io,Gradle不会自动为您删除它。如果robospice jar只引用了commons io,但没有将其打包,那么为了构建项目,您必须在主脚本中将其声明为依赖项。

您注意到两个commons io dep具有不同的groupid吗?这就是为什么类添加了两次,gradle无法知道它们是相同的DEP。@WonderCsabo yes 1.3.2和2.4有不同的GroupID。但是\--org.apache.commons:commons io:1.3.2 \--commons io:commons io:1.3.2->2.4根据这一点,gradle足够聪明了。还是我解释错了?这整棵树都乱七八糟了。它说org.apache.commons:commons-io:1.3.2具有commons-io:commons-io:1.3.2依赖关系,这是不可能发生的。您可以发布build.gradle或示例项目吗?然而,这个deptree很简单,没有令人困惑的替换。这是我的产品版本。格雷德尔在那里。我想我应该进一步挖掘。可能是一些插件。因为使用了相同的构建工具和GradleRapper版本。我只是对build.gradle进行了gradle依赖。如您所见,有两个commons io deps:org.apache.commons:commons io和commons io:commons io。我已将commons io:commons io:2.4添加到依赖项列表中。我只是想知道为什么上面的-q依赖项显示org.apache.commons:commons io:1.3.2被替换了,但它不是。谢谢你提供的信息。我越是听说格拉德,我就越不喜欢它。听起来很难使用一些非常糟糕的默认值。