2015-02-27 14 views
8

Tutaj jest częścią mojego build.gradle że ma konflikt:Android AssertJ 1.0.0 z Androidem 1.1.1 Gradle

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

Problem widzę w dzienniku:

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

Podobno usuwa konflikt zależność od ścieżki klasy. Nie jestem pewien, czy jest to wtyczka gradle lub android gradle.

Próbowałem dalej:

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

Ale nadal mam błędy kompilacji więc zależność jest wykluczone.

Próbowałem dalej:

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'] 
    } 
} 

Ale wygląda na to, że nie działa, ponieważ nie zawodzi pierwszego konfliktu i nadal mam błędy kompilacji.

Jakie będą Twoje sugestie?

UPDATE Co mam na myśli, usuwając zależność - widzę dużo błędów kompilacji że assertj nie znaleziono

Odpowiedz

7

wpadłem na ten sam problem. Naprawiono to dla mnie:

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

nie działa dla mnie. Nadal widzę wiele "błąd: pakiet org.assertj.android.api nie istnieje import statycznego org.assertj.android.api.Assertions.assertThat;' –

+0

Czy możesz spróbować uruchomić 'gradle clear' przed testami? –

0

Ok. Problem polegający na tym, że biblioteka jest biblioteką. Dlatego potrzebujemy dodatkowego wysiłku, aby upewnić się, że aar jest rozpakowany do build\intermediates.

Jestem prawie pewien, że ta funkcjonalność została dołączona do wtyczki robolectric-gradle. Ale na razie to nie działa.

Aby rozwiązać problem, pobrałem android-assertjaar i rozpakowałem go. Zmieniłem nazwę na classes.jar na android-assertj.jar (mile widziane stare czasy) i przeniesiono do folderu lib.

I zastąpiony android-asserj zależność do następnego w moim Gradle:

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

więc testy są opracowywane i zdolny do uruchomienia. Ale zawodzi.

Aby go naprawić Dodałem też lokalizację mojego pliku manifestu do config:

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

Po tym testy pracują z konsoli, ale nie z AS. Muszę teraz zatańczyć z AppCompat zasobami :)

Zadowolony test!

UPD: To obejście nie jest potrzebne z najnowszej android Gradle wtyczki

+0

Dlaczego downvoting? –

+0

Pomysł na pobranie słoików i zmianę nazw klas spowodował, że mój palec spustowy nieco się swędził. :) Szczerze mówiąc masz dobrą, dobrze intencjonalną i dobrze wyjaśnioną odpowiedź - to tylko złe rozwiązanie. (FYI, usunąłem argument i głosowałem wyżej na twoje pytanie, które jest również dobrze wyjaśnione). Twoje zdrowie. – pjco

+0

Dzięki! To było obejście tego, że nie jest potrzebne więcej. Skasuję odpowiedź –

-2

trzeba zmienić:

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

do:

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

zapewniają również, że folder Test nazywa test i nie androidTest

+0

, ale kompilacja jest używana dla wersji wersji nie testowej, więc kod wydania będzie miał assertj rzeczy? – Caipivara

0

Th Przyjęta odpowiedź nie zadziałała dla mnie. Jednak dodanie następujących nie działa dla mnie:

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

oraz:

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

podstawie https://stackoverflow.com/a/29947562/2832027

+0

Pytanie i odpowiedź są już nieaktualne, tak jak dla mnie. Nie mam żadnych problemów z zapewnieniem assertj w projekcie. Jak również AssetJ na Androida poszło już dwie wersje w górę –

+0

Problem nadal istnieje, o ile aktualna wersja AssertJ (1.1.0) nie korzysta z najnowszej wersji adnotacji pomocniczych (23.0.1). Najnowsze wersje reguł Espresso i com.android.support.test: rules również używają starych wersji adnotacji pomocniczych. Znalazłem twoje pytanie, gdy szukałem błędu. – TTransmit