2015-02-27 12 views
8

Ecco parte della mia build.gradle che ha conflitto:Android 1.0.0 AssertJ con Gradle Android 1.1.1

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

Il problema che vedo in registro:

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

Apparentemente rimuove in conflitto dipendenza dal classpath. Non sono sicuro se sia il plug-in gradle o android gradle.

Ho provato prossimo:

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

Ma ho ancora errori di compilazione in modo da dipendenza è esclusa.

Ho provato prossimo:

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

ma sembra che non funziona in quanto non sta venendo a mancare il primo conflitto e ho ancora errori di compilazione.

Quali saranno i vostri suggerimenti?

UPDATE Cosa voglio dire, eliminando la dipendenza - Vedo un sacco di errori di compilazione che assertj non trovato

risposta

7

Ho incontrato lo stesso problema. Questo lo ha risolto per me:

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

non funziona per me. Vedo ancora un sacco di errori: il pacchetto org.assertj.android.api non esiste import static org.assertj.android.api.Assertions.assertThat; ' –

+0

Puoi provare a eseguire' gradle clear' prima dei test? –

0

Ok. Il problema è che android-assertj è la libreria aar. Pertanto, è necessario uno sforzo aggiuntivo per garantire che aar venga decompresso a build\intermediates.

Sono abbastanza sicuro che questa funzionalità è stata inclusa nel plug-in robolectric-gradle. Ma non funziona per ora.

Per risolvere il problema, ho scaricato android-assertjaar e lo abbiamo decompresso. Ho rinominato classes.jar in android-assertj.jar (benvenuto vecchi tempi) e spostato nella cartella lib.

E ho sostituito android-asserj dipendenza prossimo nel mio Gradle:

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

Così i test sono compilati e in grado di eseguire. Ma fallendo.

Per risolvere il problema Ho anche aggiunto posizione della mia file manifesto di configurazione:

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

Dopo questo test stanno lavorando da console, ma non da AS. Devo ballare ora con le risorse AppCompat :)

Test felici!

UPD: Questa soluzione non è necessaria con recente Android plug Gradle

+0

Perché downvoting? –

+0

L'idea di scaricare i barattoli e le classi di rinomina mi ha dato un po 'di prurito al grilletto down-down. :) Per essere onesti, hai una risposta buona, ben intenzionata e ben spiegata: è solo una soluzione pessima. (FYI, ho rimosso il downvote e ho votato la tua domanda che è anche ben spiegata). Saluti. – pjco

+0

Grazie! Questo è stato un workaround non è più necessario. Cancellerò la risposta –

-2

È necessario modificare:

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

a:

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

Assicurarsi inoltre che la cartella di prova si chiama test e non androidTest

+0

ma la compilazione è usata per le versioni di rilascio e non per la versione di prova, quindi il codice di rilascio avrà delle cose assertj? – Caipivara

0

Th La risposta accettata non ha funzionato per me. Tuttavia, aggiungendo la seguente ha funzionato per me:

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

e:

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

Sulla base https://stackoverflow.com/a/29947562/2832027

+0

La domanda e la risposta sono già obsolete come per me. Non ho problemi ad avere assertj nel progetto ora. AssetJ per Android ha già aggiunto due versioni su –

+0

Il problema esiste ancora fino a quando la versione corrente di AssertJ (1.1.0) non utilizza l'ultima versione di supporto-annotazioni (23.0.1). Le ultime versioni di Espresso e com.android.support.test: rules utilizzano anche vecchie versioni di annotazioni di supporto. Ho trovato la tua domanda quando ho cercato l'errore. – TTransmit