2015-01-20 14 views
5

Sto cercando di compilare un modulo il cui albero delle dipendenze sembraLa risoluzione del conflitto di Gradle non funziona con i progetti Android?

+--- com.squareup.burst:burst-junit4:1.0.2 
| +--- com.squareup.burst:burst:1.0.2 
| \--- junit:junit:4.11 -> 4.12 
|   \--- org.hamcrest:hamcrest-core:1.3 
+--- com.android.support.test.espresso:espresso-core:2.0 
| +--- com.squareup:javawriter:2.1.1 
| +--- org.hamcrest:hamcrest-integration:1.1 
| | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 
| +--- org.hamcrest:hamcrest-library:1.1 
| | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 
| +--- com.android.support.test.espresso:espresso-idling-resource:2.0 
| +--- com.android.support.test:testing-support-lib:0.1 
| | \--- junit:junit-dep:4.10 
| |   \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 
| +--- com.google.code.findbugs:jsr305:2.0.1 
| +--- javax.annotation:javax.annotation-api:1.2 
| \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 
... 

Come potete vedere c'è un conflitto hamcrest-core versione, ma Gradle sembra riconoscere il conflitto e di applicare il suo predefinito strategia di "ultima versione", che è esattamente quello che voglio.

Tuttavia, quando si cerca di eseguire assembleDebugTest (manualmente o tramite Android Studio) ottengo

com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/MatcherAssert; 

Alcune risposte alle domande simili suggeriscono exclude ing i vasetti indesiderate, ma ho incontrato un gruppo di simili conflitti e sta diventando un po 'fuori mano.

Perché la strategia di conflitto predefinita di gradle non rimuove automaticamente il jar più vecchio? Il plug-in Android gradle sopprime tale funzionalità?

+0

http://stackoverflow.com/questions/20989317/multiple-dex-files-define-landroid-support-v4-accessibilityservice-accessibility –

+0

ho visto che, e capisco la soluzione rapida. Le mie domande spiegano perché la strategia di risoluzione predefinita di gradle non venga utilizzata per rimuovere automaticamente uno dei barattoli, come mi aspetterei leggendo [questo documento] (http://www.gradle.org/docs/current/dsl/org. gradle.api.artifacts.ResolutionStrategy.html). –

+0

potrebbe provare una build con -verbose ... trovare dove viene convocata configurations.resolutionStrategy {} ... se NON viene invocato, fornire la propria implementazione. –

risposta

8

Dopo un po 'di più di scavo, sembra che il problema è che il mio albero delle dipendenze conteneva hamcrest-core 1.3 e 1.1 hamcrest-integration, e MatcherAssert è stato spostato hamcrest-integration-hamcrest-core tra di esse.

Così gradle stava eseguendo la risoluzione del conflitto come documentato; c'era solo un conflitto tra moduli distinti che non mi aspettavo.

La forzatura di 1,3 per tutti e tre i moduli hamcrest ha risolto il problema.

+2

come faccio a fare questo –

+0

@ user1232726 vedere https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html –

Problemi correlati