2015-02-27 14 views
8

Dies ist Teil meines build.gradle, den Konflikt hat:Android AssertJ 1.0.0 mit Android gradle 1.1.1

... 
dependencies { 
    classpath 'com.android.tools.build:gradle:1.1.1' 
} 
... 
testCompile('com.squareup.assertj:assertj-android:1.0.0') 
... 

Das Problem, das ich in Protokoll anzeigen:

WARNING: Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (21.0.3) and test app (20.0.0) differ. 

Anscheinend es widersprüchliche entfernt Abhängigkeit vom Klassenpfad. Ich bin mir nicht sicher, ob es gradle oder android gradle Plugin ist.

Ich habe nächste versucht:

testCompile('com.squareup.assertj:assertj-android:1.0.0') { 
    exclude group: 'com.android.support', module: 'support-annotations' 
    } 

Aber ich habe noch Kompilierungsfehlern haben so die Abhängigkeit ist ausgeschlossen.

Ich habe versucht, weiter:

configurations.all { 
    resolutionStrategy { 
    // fail eagerly on version conflict (includes transitive dependencies) 
    // e.g. multiple different versions of the same dependency (group and name are equal) 
    failOnVersionConflict() 

    // force certain versions of dependencies (including transitive) 
    // *append new forced modules: 
    force 'com.android.support:support-annotations:21.0.3' 
    // *replace existing forced modules with new ones: 
    forcedModules = ['com.android.support:support-annotations:21.0.3'] 
    } 
} 

Aber sieht aus wie es nicht, da funktioniert es nicht auf den ersten Konflikt versagt und ich noch Kompilierungsfehlern haben.

Was werden Ihre Vorschläge sein?

UPDATE Was meine ich durch die Abhängigkeit zu entfernen - ich viel Kompilierungsfehler sehen, dass assertj nicht

gefunden

Antwort

7

ich in der gleichen Ausgabe lief. Dieses reparierte es für mich:

testCompile('com.squareup.assertj:assertj-android:1.0.0'){ 
    exclude group: 'com.android.support', module:'support-annotations' 
} 
+0

Ist für mich nicht. Ich sehe immer noch viel 'error: Paket org.assertj.android.api existiert nicht import static org.assertj.android.api.Assertions.assertThat;' –

+0

Können Sie versuchen, 'gradle clear' vor den Tests auszuführen? –

0

Ok. Das Problem, dass android-assertj ist aar Bibliothek. Wir brauchen also zusätzliche Anstrengungen, um sicherzustellen, dass aar auf build\intermediates entpackt wird.

Ich bin mir ziemlich sicher, dass diese Funktionalität in robolectric-gradle Plugin enthalten war. Aber es funktioniert jetzt nicht.

Um das Problem zu beheben, habe ich android-assertjaar heruntergeladen und entpackt. Ich umbenannte classes.jar zu android-assertj.jar (willkommene alte Zeiten) und bewegte sich zu Lib Faltblatt.

Und ich ersetzt android-asserj Abhängigkeit zum nächsten in meinem gradle:

testCompile files('lib/android-assertj.jar') 
    testCompile 'org.assertj:assertj-core:1.6.0' 

So ist die Tests zusammengestellt werden und in der Lage zu laufen. Aber scheitern.

Um es zu beheben ich auch Position meiner Manifestdatei Config hinzugefügt:

@Config(emulateSdk = 18, reportSdk = 18, manifest = "src/main/AndroidManifest.xml") 

Nach diesen Tests von der Konsole arbeiten, aber nicht von AS. Ich muss jetzt mit AppCompat Ressourcen tanzen :)

Happy testen!

UPD: Diese Problemumgehung nicht mit neuesten Android gradle Plugin

+0

Warum downvoting? –

+0

Die Idee des Herunterladens von Jars und Umbenennen Klassen hat meine Downvote Trigger-Finger ein bisschen juckende. :) Um ehrlich zu sein, haben Sie eine gute, gut gemeinte und gut erklärte Antwort - es ist nur eine schlechte Lösung. (Zu Ihrer Information, ich habe den Downvote entfernt und Ihre Frage neu abgestimmt, was auch gut erklärt ist). Prost. – pjco

+0

Danke! Das war Workaround, es wird nicht mehr benötigt. Ich lösche Antwort –

-2

benötigt wird, müssen Sie ändern:

testCompile('com.squareup.assertj:assertj-android:1.0.0') { 
    exclude group: 'com.android.support', module: 'support-annotations' 
} 

zu:

compile('com.squareup.assertj:assertj-android:1.0.0') { 
    exclude group: 'com.android.support', module: 'support-annotations' 
} 

außerdem sicher, dass Ihre Testordner test aufgerufen wird und nicht androidTest

+0

, aber kompilieren wird für Freigabeversionen nicht Testversion benutzt, also Freigabecode hat Assertj Sachen? – Caipivara

0

Th Die angenommene Antwort funktionierte nicht für mich. Allerdings hat die folgende Zugabe von Arbeit für mich:

androidTestCompile 'com.android.support:support-annotations:23.0.1' 

und:

testCompile 'com.android.support:support-annotations:23.0.1' 

Basierend auf https://stackoverflow.com/a/29947562/2832027

+0

Die Frage und Antwort ist schon veraltet wie für mich. Ich habe keine Probleme, jetzt im Projekt zu behaupten. Auch AssetJ für Android ging bereits zwei Versionen nach oben –

+0

Das Problem besteht immer noch, soweit die aktuelle Version von AssertJ (1.1.0) nicht die neueste Version von support-annotations (23.0.1) verwendet. Die neuesten Versionen von Espresso und com.android.support.test: rules verwenden auch alte Versionen von support-annotations. Ich habe Ihre Frage gefunden, als ich nach dem Fehler gesucht habe. – TTransmit

Verwandte Themen