2015-01-20 5 views
5

Ich versuche, ein Modul, dessen Abhängigkeitsbaumes wieGradle's Konfliktlösung funktioniert nicht mit Android-Projekten?

sieht
+--- 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 
... 

zu kompilieren Wie Sie sich ein hamcrest-core Versionskonflikt sehen, aber gradle scheint den Konflikt und gilt den Standard „neueste Version“ Strategie zu erkennen, die ist genau das, was ich will.

jedoch bei dem Versuch, assembleDebugTest (entweder manuell oder durch Android Studio) I

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

Einige Antworten auf ähnliche Fragen vorschlagen exclude ing die unerwünschten Gläser, aber ich habe eine Reihe von ähnlichen Konflikten begegnet bekommen zu laufen und es wird etwas außer Kontrolle geraten.

Warum gradle die nicht Standard-Konfliktstrategie automatisch das ältere Glas zu entfernen? Unterdrückt das android grodle Plugin diese Funktionalität?

+0

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

+0

Ich habe das gesehen, und ich verstehe die schnelle Lösung. Meine Frage ist, warum die Standardauflösungsstrategie von Graple nicht dazu verwendet wird, eines der Gläser automatisch zu entfernen, wie ich es von [doc] (http://www.gradle.org/docs/current/dsl/org) erwarten würde. gradle.api.artifacts.ResolutionStrategy.html). –

+0

könnte einen Build mit -verbose ... versuchen, wo configurations.resolutionStrategy {} aufgerufen wird .... wenn NICHT aufgerufen, dann geben Sie eine eigene Implementierung davon an. –

Antwort

8

Nach etwas mehr graben, so scheint es das Problem, dass mein Abhängigkeitsbaum enthalten ist hamcrest-core 1.3 und hamcrest-integration 1,1 und MatcherAssert wurde hamcrest-integration-hamcrest-core zwischen diesen Versionen verschoben.

So gradle wurde Konfliktlösung als dokumentiert durchführt; Es gab nur einen Konflikt zwischen verschiedenen Modulen, den ich nicht erwartet hatte.

Erzwingen 1.3 für alle drei hamcrest Module kümmerten sich um das Problem.

+2

Wie mache ich das –

+0

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

Verwandte Themen