6

When trying to run the app on my nexus 7, the gradle build fails every time and gives the same error:

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

The error seems to indicate that CopyUtils.class from commons-io is being included twice in the build process.

The full log:

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

Also my 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'])
}

I seem to now get

Error:(43, 0) Gradle DSL method not found: 'com.android.support:support-v4:24.1.1()' Possible causes:

  • The project 'wildrank-android-master' may be using a version of Gradle that does not contain the method. Open Gradle wrapper file
  • The build file may be missing a Gradle plugin. Apply Gradle plugin
  • My Gradle wrapper

    Wed Jul 06 21:02:27 PDT 2016

    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

    My new gradle file

    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
    // 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' }
    

    }

    insanity_serum
    • 65
    • 1
    • 1
    • 8
    • Possible duplicate of [Android Gradle compiling commons-io creates duplicate in library tree](http://stackoverflow.com/questions/35185512/android-gradle-compiling-commons-io-creates-duplicate-in-library-tree) – buczek Aug 01 '16 at 20:09

    5 Answers5

    22

    There is an option to fix it on gradle dependency resolution level

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

    Reason of the conflict is that org.apache.commons:commons-io:1.3.2 was pushed by mistake https://stackoverflow.com/a/37421794/624706

    You can see where dependency is coming from with

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

    Community
    • 1
    • 1
    Sergii Pechenizkyi
    • 22,227
    • 7
    • 60
    • 71
    13

    Please use the below code in build.gradle file.

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

    Enjoy!!!

    Rasool Mohamed
    • 433
    • 7
    • 17
    1

    Edit 2:

    I created a fork of the project that compiles and runs on Android Studio 2.2 preview 7. You can also check out the diff if you don't want to redownload the project.

    Edit:

    Here is a build.gradle file that compiled for me. I've commented all the important changes:

    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'
    }
    

    Try what Maxence Barroy said. If that doesn't work, check out this answer:

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

    Since I don't know what your build.gradle file looks like, I can't really help you, but check out this answer too. Also, make sure you have the latest version of Gradle 'com.android.tools.build:gradle:2.2.0-alpha6'

    Community
    • 1
    • 1
    SUPERCILEX
    • 3,929
    • 4
    • 32
    • 61
    • My build.gradle has been added to the description – insanity_serum Aug 03 '16 at 00:29
    • 1
      I've updated my answer with a build.gradle file that worked for me: I created a fresh project in Android Studio 2.2 and used the above build.gradle file. – SUPERCILEX Aug 03 '16 at 02:27
    • Can I see the new gradle file? Also, if this is a relatively new project, maybe try just creating a new project using Android Studio. It should set everything up properly and then you can add the dependencies you need again. – SUPERCILEX Aug 03 '16 at 16:51
    • 1
      Its not new. This is an open source project which I wanted to use for robotics(its allowed by the creators). Its been only having gradle problems. I'll update with the gradle file. – insanity_serum Aug 03 '16 at 17:08
    • 1
      I got it working on my Nexus 6P: check out the edit above. – SUPERCILEX Aug 06 '16 at 03:31
    • Excellent answer: thanks for sharing your build file in full - helps to see it in context. It helped me fix my problem adding protobuf in leading to a conflict on org.apache.commons.lang, which I fixed with an `exclude module: 'commons-lang'` – WillC Oct 13 '18 at 04:53
    0

    Also, you can check the gradle version. Above properties should cause of merge conflicts.

    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'
    

    And please try the above properties.

    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'
    
    Özer Özcan
    • 1,253
    • 16
    • 17
    0
     compile('org.apache.commons:commons-io:1.3.2') {
            exclude module: 'commons-io'
     }
    

    try it..

    Neeraj Singh
    • 610
    • 9
    • 15