Reputation: 1292
I'm trying to build and maintain an old application for work but I can't get past the build phase. In my app/build.gradle
file I have
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.apache.commons:commons-io:1.3.2'
//some more libraries compiled as well
}
but get the following error when trying to execute:
Error:Execution failed for task ':myApp'. com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/apache/commons/io/CopyUtils.class
This is almost certainly because when I compile that jar, at the top of my External Libraries tree, this is generated:
Why is this happening, and how can I get it to stop so I can complete the build?
Upvotes: 8
Views: 9897
Reputation: 7557
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
Upvotes: 13
Reputation: 402
I know that this thread is old enough, but if someone faces this issue, the reason may be in the artifact itself.
com.apache.commons:commons-io:XXX
has been moved to commons-io:commons-io:XXX
and fetching of the old artifact may produce unexpected behavior.
Upvotes: 5
Reputation: 47985
There is a simple way to exclude the double classes. At first you need to find out which dependency is causing that if you know that use this code:
compile('com.example:some-dependency:4.2') {
exclude module: 'commons-io'
}
Upvotes: 5
Reputation: 341
It could be possible that other libraries in the project have the commons-io dependency causing duplicate entries.
See if this helps - Gradle Duplicate Entry: java.util.zip.ZipException
Upvotes: 1