Android Gradle编译commons-io在库树中创建副本

时间:2016-02-03 19:04:19

标签: java android gradle

我正在尝试构建和维护旧的应用程序,但我无法完成构建阶段。在我的app/build.gradle文件中

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.apache.commons:commons-io:1.3.2'
    //some more libraries compiled as well
}

但在尝试执行时遇到以下错误:

  

错误:任务':myApp'执行失败。   com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:org / apache / commons / io / CopyUtils.class

这几乎可以肯定是因为当我编译那个jar时,在我的外部库树的顶部,生成了这个:

enter image description here

为什么会发生这种情况,如何让它停止以便我可以完成构建?

4 个答案:

答案 0 :(得分:13)

可以选择在gradle依赖关系解析级别

上修复它
configurations.all {
    resolutionStrategy.dependencySubstitution {
        substitute module('org.apache.commons:commons-io:1.3.2') with module('commons-io:commons-io:1.3.2')
    }
}

冲突的原因是org.apache.commons:commons-io:1.3.2错误地推动了gradle :main:dependencyInsight --configuration compile --dependency commons-io

您可以通过

查看依赖关系的来源

setRemoteSdp

答案 1 :(得分:5)

有一种简单的方法可以排除双重类。首先,如果您知道使用此代码,则需要找出导致该依赖项的依赖项:

compile('com.example:some-dependency:4.2') {
    exclude module: 'commons-io'
}

答案 2 :(得分:5)

我知道这个帖子已经足够老了,但是如果有人面对这个问题,原因可能在于工件本身。

com.apache.commons:commons-io:XXX已经movedcommons-io:commons-io:XXX并且抓取旧工件可能会产生意外行为。

答案 3 :(得分:1)

项目中的其他库可能有commons-io依赖项导致重复条目。

看看这是否有帮助 - Gradle Duplicate Entry: java.util.zip.ZipException