2016-02-03 3 views
5

Sto provando a creare e mantenere una vecchia applicazione per il lavoro ma non riesco a superare la fase di costruzione. Nel mio file app/build.gradle hoGradle di Android gradazione commons-io crea duplicati nell'albero delle biblioteche

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

ma ottengo il seguente errore quando si tenta di eseguire:

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

Questo è quasi certamente perché quando compilo quel vaso, nella parte superiore del mio albero librerie esterne, questo viene generato:

enter image description here

Perché succede questo, e come posso farlo per fermare in modo da poter completare la costruzione?

risposta

5

C'è un modo semplice per escludere le doppie classi. In un primo momento è necessario scoprire quale delle dipendenze sta causando che se si sa che l'uso di questo codice:

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

Sembra essere comune stesso. Quando lo lascio fuori, entrambe le versioni scompaiono dalla libreria. Aggiungerò l'esclusione alla sua compilation ma sembra una specie di controintuitivo ... – Csteele5

+0

Sospetto che sia colpa di questa riga: 'compila fileTree (dir: 'libs', include: ['* .jar' ]) 'hai una directory libs con i jar? – rekire

1

Potrebbe essere possibile che altre librerie nel progetto abbiano la dipendenza da common che causa voci duplicate.

vedere se questo aiuta - Gradle Duplicate Entry: java.util.zip.ZipException

+0

Non sembra che sia così. Ho esaminato quella domanda e l'ho esclusa. Guardando attraverso tutte le mie altre librerie non sembrano esserci dipendenze da commons_io, quindi non riesco a immaginare perché stia succedendo. – Csteele5

5

So che questa discussione è abbastanza vecchio, ma se qualcuno affronta questo problema, il motivo può essere nel manufatto si.

com.apache.commons:commons-io:XXX è stato moved a commons-io:commons-io:XXX e il recupero del vecchio artefatto può produrre un comportamento imprevisto.

10

C'è un'opzione per risolvere il problema a livello risoluzione Gradle dipendenza

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

Motivo del conflitto è che org.apache.commons:commons-io:1.3.2 è stato spinto per errore https://stackoverflow.com/a/37421794/624706

Potete vedere dove la dipendenza è venuta da con

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

Problemi correlati