2016-02-03 9 views
5

Ich versuche, eine alte Anwendung für die Arbeit zu bauen und zu pflegen, aber ich kann nicht über die Build-Phase. In meiner app/build.gradle Datei habe ichAndroid Gradle kompilieren commons-io erstellt Duplikate in Bibliotheksbaum

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

aber die folgende Fehlermeldung erhalten, wenn auszuführen versuchen:

Error:Execution failed for task ':myApp'. com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/apache/commons/io/CopyUtils.class

Dies ist fast sicher, weil, wenn ich das Glas kompilieren, an der Spitze meiner externen Bibliotheken Baum, dies wird generiert:

enter image description here

, warum dies geschieht, und wie kann ich es bekommen zu stoppen, so kann ich den Build abgeschlossen?

Antwort

5

Es gibt eine einfache Möglichkeit ist es, die Doppel Klassen auszuschließen. Zunächst müssen Sie herausfinden, welche die Abhängigkeit verursacht, dass, wenn Sie verwenden diesen Code kennen:

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

Es scheint Commons-io selbst zu sein. Wenn ich das hinterlasse, verschwinden beide Versionen aus der Bibliothek. Ich werde den Exclude zu seiner eigenen Kompilation hinzufügen, aber das scheint irgendwie kontraintuitiv zu sein ... – Csteele5

+0

Ich vermute, dass es der Fehler dieser Zeile ist: 'compile fileTree (dir: 'libs', include: ['* .jar' ]) 'Haben Sie ein libs-Verzeichnis mit Gläsern? – rekire

1

Es könnte sein, dass andere Bibliotheken im Projekt die Commons-io-Abhängigkeit haben, die doppelte Einträge verursacht.

sehen, ob das hilft - Gradle Duplicate Entry: java.util.zip.ZipException

+0

Es scheint nicht, dass dies der Fall ist. Ich habe mir diese Frage angeschaut und sie ausgeschlossen. Wenn ich durch all meine anderen Bibliotheken gucke, scheint es keine Abhängigkeiten zu commons_io zu geben, also kann ich mir nicht vorstellen, warum das passiert. – Csteele5

5

Ich weiß, dass dieser Thread ist alt genug, aber wenn jemand dieses Problem steht, kann der Grund in dem Artefakt selbst.

com.apache.commons:commons-io:XXX wurde moved bis commons-io:commons-io:XXX und das Abrufen des alten Artefakts kann zu unerwartetem Verhalten führen.

10

es eine Option auf gradle Abhängigkeitsauflösungsstufe ist

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

Grund des Konflikts zu beheben ist, dass org.apache.commons:commons-io:1.3.2 versehentlich https://stackoverflow.com/a/37421794/624706 Sie können

geschoben wurde sehen, wo die Abhängigkeit von mit

kommt

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

Verwandte Themen