Gradle 构建失败:java.util.zip.ZipException:重复条目:org/apache/commons/io/CopyUtils.class

Posted

技术标签:

【中文标题】Gradle 构建失败:java.util.zip.ZipException:重复条目:org/apache/commons/io/CopyUtils.class【英文标题】:Gradle build failed: java.util.zip.ZipException: duplicate entry: org/apache/commons/io/CopyUtils.class 【发布时间】:2016-12-06 23:43:33 【问题描述】:

尝试在我的 nexus 7 上运行应用程序时,gradle 构建每次都失败并给出相同的错误:

> com.android.build.api.transform.TransformException:
java.util.zip.ZipException: duplicate entry:
org/apache/commons/io/CopyUtils.class

该错误似乎表明来自commons-ioCopyUtils.class 在构建过程中被包含两次。

完整日志:

Information:Gradle tasks [:android:assembleDebug]

:android:preBuild UP-TO-DATE

:android:preDebugBuild UP-TO-DATE

:android:checkDebugManifest

:android:preReleaseBuild UP-TO-DATE

:android:prepareComAndroidSupportMultidex101Library UP-TO-DATE

:android:prepareDebugDependencies

:android:compileDebugAidl UP-TO-DATE

:android:compileDebugRenderscript UP-TO-DATE
:android:generateDebugBuildConfig UP-TO-DATE

:android:mergeDebugShaders UP-TO-DATE

:android:compileDebugShaders UP-TO-DATE

:android:generateDebugAssets UP-TO-DATE

:android:mergeDebugAssets UP-TO-DATE

:android:generateDebugResValues UP-TO-DATE


:android:generateDebugResources UP-TO-DATE

:android:mergeDebugResources UP-TO-DATE

:android:processDebugManifest UP-TO-DATE

:android:processDebugResources UP-TO-DATE

:android:generateDebugSources UP-TO-DATE

:android:incrementalDebugJavaCompilationSafeguard UP-TO-DATE

:android:compileDebugJavaWithJavac UP-TO-DATE

:android:compileDebugNdk UP-TO-DATE

:android:compileDebugSources UP-TO-DATE

:android:prePackageMarkerForDebug
:android:transformClassesWithJarMergingForDebug FAILED
Error:Execution failed for task 
':android:transformClassesWithJarMergingForDebug'.

> com.android.build.api.transform.TransformException: 
java.util.zip.ZipException: duplicate entry: 
org/apache/commons/io/CopyUtils.class

Information:BUILD FAILED

Information:Total time: 11.208 secs

Information:1 error

Information:0 warnings

Information:See complete output in console

还有我的 build.gradle:

apply plugin: 'android'

android 
    compileSdkVersion 19
    buildToolsVersion "19.1.0"


    defaultConfig 
        applicationId "org.wildstang.wildrank.android"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    
    dexOptions 
        javaMaxHeapSize "4g"
    

    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    

    lintOptions 
        abortOnError false
    


dependencies 
    compile 'com.android.support:support-v4:19.+'
    compile 'com.android.support:support-v13:19.+'
    compile 'de.congrace:exp4j:0.3.+'
    compile 'org.apache.commons:commons-io:1.3.+'
    compile fileTree(dir: 'libs', include: ['*.jar'])

我现在好像明白了

错误:(43, 0) 找不到 Gradle DSL 方法:'com.android.support:support-v4:24.1.1()' 可能的原因:

项目“wildrank-android-master”可能正在使用不包含该方法的 Gradle 版本。 打开 Gradle 包装文件 构建文件可能缺少 Gradle 插件。 应用 Gradle 插件

我的 Gradle 包装器

2016 年 7 月 6 日星期三 21:02:27 PDT

distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists

zipStoreBase=GRADLE_USER_HOME

zipStorePath=wrapper/dists

distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

我的新 gradle 文件

应用插件:'com.android.application' //重要:'com.android.application' 不是

机器人 compileSdkVersion 24 // 编译 sdk 应该总是最新的 buildToolsVersion "24.0.1" // 不知道这是否重要

defaultConfig 
    applicationId "org.wildstang.wildrank.android"
    minSdkVersion 14
    targetSdkVersion 19 //Looks like this is a new app, why are you using 19 and not 24?
    versionCode 1
    versionName "1.0"
    multiDexEnabled true

dexOptions 
    javaMaxHeapSize "4g"


compileOptions 
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7


buildTypes 
    release 
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    


lintOptions 
    abortOnError false

依赖 compile fileTree(include: ['*.jar'], dir: 'libs') //重要

//Ignore these, I don't think they are important for you, but I needed them to get my test project to compile
// These version numbers worked for me:
compile 'com.android.support:support-v4:24.1.1'exclude group: 'org.apache.commons', module: 'commons-io' 
compile 'com.android.support:support-v13:24.1.1' exclude module: 'commons-io' 
compile 'de.congrace:exp4j:0.3.11' exclude module: 'commons-io' 
compile 'org.apache.commons:commons-io:1.3.2' exclude module: 'commons-io' 

【问题讨论】:

Android Gradle compiling commons-io creates duplicate in library tree的可能重复 【参考方案1】:

有一个选项可以在 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被错误推送https://***.com/a/37421794/624706

您可以使用

查看依赖项的来源

gradle :main:dependencyInsight --configuration compile --dependency commons-io

【讨论】:

这样就解决了,在声明maven库后放这段代码【参考方案2】:

请在 build.gradle 文件中使用以下代码。

configurations 
    all*.exclude group: 'org.apache.commons'

享受!!!

【讨论】:

【参考方案3】:

编辑 2:

我为在 Android Studio 2.2 preview 7 上编译和运行的项目创建了一个 fork。如果您不想重新下载该项目,也可以查看 diff。

编辑:

这是为我编译的build.gradle 文件。我已经评论了所有重要的变化:

apply plugin: 'com.android.application' //IMPORTANT: 'com.android.application' not 

android 
    compileSdkVersion 24 // compile sdk should always be latest
    buildToolsVersion "24.0.1" // Don't know if this matters


    defaultConfig 
        applicationId "org.wildstang.wildrank.android"
        minSdkVersion 14
        targetSdkVersion 19 //Looks like this is a new app, why are you using 19 and not 24?
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    
    dexOptions 
        javaMaxHeapSize "4g"
    

    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    

    lintOptions 
        abortOnError false
    


dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs') //IMPORTANT

    //Ignore these, I don't think they are important for you, but I needed them to get my test project to compile
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha5'
    compile 'com.android.support:design:24.1.1'

    // These version numbers worked for me:
    compile 'com.android.support:support-v4:24.1.1'
    compile 'com.android.support:support-v13:24.1.1'
    compile 'de.congrace:exp4j:0.3.11'
    compile 'org.apache.commons:commons-io:1.3.2'

试试Maxence Barroy 所说的。如果这不起作用,请查看this answer:

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

由于我不知道您的build.gradle 文件是什么样的,我无法真正帮助您,但也请查看this answer。另外,请确保您拥有最新版本的 Gradle 'com.android.tools.build:gradle:2.2.0-alpha6'

【讨论】:

我的 build.gradle 已添加到描述中 我已经用对我有用的 build.gradle 文件更新了我的答案:我在 Android Studio 2.2 中创建了一个新项目并使用了上面的 build.gradle 文件。 我可以看到新的 gradle 文件吗?此外,如果这是一个相对较新的项目,也许可以尝试使用 Android Studio 创建一个新项目。它应该正确设置所有内容,然后您可以再次添加所需的依赖项。 它不是新的。这是一个开源项目,我想将其用于机器人技术(创建者允许)。它只是有gradle问题。我将使用 gradle 文件进行更新。 我在 Nexus 6P 上运行它:查看上面的编辑。【参考方案4】:

另外,您可以查看 gradle 版本。以上属性应该会导致合并冲突。

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

build.gradle

classpath 'com.android.tools.build:gradle:2.1.3'

请尝试以上属性。

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

build.gradle

classpath 'com.android.tools.build:gradle:2.3.3'

【讨论】:

【参考方案5】:
 compile('org.apache.commons:commons-io:1.3.2') 
        exclude module: 'commons-io'
 

试试吧..

【讨论】:

以上是关于Gradle 构建失败:java.util.zip.ZipException:重复条目:org/apache/commons/io/CopyUtils.class的主要内容,如果未能解决你的问题,请参考以下文章

离子构建android错误gradle错误

我在构建APK时遇到错误

如何解决 Android 中的“TransformException:java.util.zip.ZipException:重复条目”?

javazip压缩包过大解压失败

react-native runandroid 报错

在本地上运行可以,将JAR包放在HADOOP平台上运行的时候执行失败是啥原因?