Errore: conflitto con la dipendenza "com.google.code.findbugs: jsr305"


241

Ho creato un nuovo progetto in Android Studio 2.2 Preview 1 con l'app Android e il modulo Backend con Google Messaging. Questo è il file dell'app:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.xxx.xxx"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
    compile 'com.google.android.gms:play-services-gcm:9.0.0'
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

Ma sta dando:

Errore: conflitto con la dipendenza "com.google.code.findbugs: jsr305". Le versioni risolte per l'app (1.3.9) e l'app di test (2.0.1) differiscono. Vedi http://g.co/androidstudio/app-test-app-conflict per i dettagli.

Sono nuovo su Android e non riesco a trovare qual è questo errore. Come lo aggiusto?

Risposte:


642

Nella tua app build.gradleaggiungi quanto segue:

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}

Consente a Gradle di compilare solo il numero di versione indicato per tutte le dipendenze, indipendentemente dal numero di versione indicato dalle dipendenze.


57
Potrebbe essere utile spiegare questo frammento.
Andrew Gallasch,

18
@Andy dice esplicitamente a Gradle quale versione deve essere compilata (indipendentemente dal numero di versione indicato dalle dipendenze) ... mentre impone v 2.0.1funziona anche (qualunque cosa, entrambe le versioni devono essere forzate per essere identiche).
Martin Zeitler,

2
@MartinZeitler ma non spiega da dove provenga questo problema. Oggi ho questo problema con testImplementation 'junit: junit: 4.12' androidTestImplementation 'com.android.support.test: runner: 1.0.1' androidTestImplementation 'com.android.support.test.espresso: espresso-core: 3.0.1'
fralbo,

1
Grazie mille. Questo è davvero utile ancora dopo 3 anni e mezzo. ;)
Kartik il

1
@Kartik haha ​​jeeze, è stato tanto tempo fa! Nessun problema, grazie, spero che ti sia stato d'aiuto! Ho smesso da tempo di sviluppare Android ma sono sicuro che un giorno lo riprenderò g
gbhall

170

Ciò è dovuto all'espresso. È possibile aggiungere quanto segue alle app build.gradeper mitigarlo.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}

1
Non funziona. La domanda impostata come risposta funziona.
Warpzit,

2
@Warpzit - Questo ha funzionato per me (così come la risposta accettata).
Ted Hopp,

@TedHopp Alla fine ho fatto qualcos'altro. Ho avuto problemi con la compilazione gradle per api di youtube, quindi ho finito con l'uso del lib jar.
Warpzit,

2
Questa è probabilmente la risposta che tutti cercano. Nella maggior parte dei casi Android Studio include Espresso per impostazione predefinita nell'elenco delle dipendenze ed è necessario escludere un paio di cose per poterlo utilizzare insieme ad altre librerie. A parte quello che ha detto @Santhosh, anch'ioexclude group: 'com.android.support', module: 'support-annotations'
milosmns l'

1
Bene, ho appena rimosso androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {escludi gruppo: 'com.google.code.findbugs'} e ha funzionato: D perché principalmente il problema con la tua soluzione è che alcune persone hanno già * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {escludi gruppo: 'com.android.support', modulo: 'support-annotations' }) * qualcosa del genere nel loro file gradle e l'aggiunta di un'altra esclusione sta generando un'eccezione, tutti gli script di gradle grandine, ancora un voto per te :)
ShayHaned,

31

METODO 1: ho eliminato androidTestCompile sulla linea espresso-core che è stata automaticamente inclusa in un nuovo progetto. Quindi il mio Android Studio viene compilato pulito.

AndroidTestCompile è in "build.gradle (Modulo: app)":

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    ...
}

Non so se questa cancellazione avrà qualche problema lungo la strada, ma sicuramente funziona per il mio progetto attuale ora.

METODO 2: L'aggiunta di un'esclusione su findbugs funziona anche:

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs'
    })
    ...
}

METODO 3: Forzare la compilazione con una versione specifica:

(Di seguito la costringo a compilare con la versione superiore.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}

c'è un aggiornamento di versione: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft

18

Dalla guida per l'utente del plug-in Gradle :

Quando vengono eseguiti i test di strumentazione, sia l'APK principale sia l'APK di test condividono lo stesso percorso di classe. La compilazione di Gradle fallirà se l'APK principale e l'APK di test utilizzano la stessa libreria (ad esempio Guava) ma in versioni diverse. Se Gradle non lo rileva, la tua app potrebbe comportarsi diversamente durante i test e durante la normale esecuzione (incluso l'arresto anomalo in uno dei casi).

Per far sì che la compilazione abbia successo, assicurati che entrambi gli APK utilizzino la stessa versione. Se l'errore riguarda una dipendenza indiretta (una libreria che non hai menzionato in build.gradle), aggiungi semplicemente una dipendenza per la versione più recente alla configurazione

Aggiungi questa riga alle dipendenze build.gradle per utilizzare la versione più recente per entrambi gli APK:

compile('com.google.code.findbugs:jsr305:2.0.1')

Per riferimento futuro, puoi controllare la tua Gradle Console e fornirà un link utile accanto all'errore per aiutare con eventuali errori di compilazione del gradle.


8

Il motivo per cui ciò accade è che la dipendenza diff usa la stessa lib della versione diff.
Quindi, ci sono 3 passaggi o (1 passaggio) per risolvere questo problema.

1 °

Inserisci

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
}

al tuo build.gradlefile inandroid {...}

2 °

Apri il terminale nel comando di
esecuzione di Android Studio ./gradlew -q app:dependencies.

3 °

Fai clic sulla Clean Projectbarra dei menu di Android Studio Buildnell'elenco.
Ricostruirà il progetto e poi remove codice nel primo passaggio.

Forse hai solo bisogno di eseguire il secondo passaggio. Non riesco a eseguire il rollback quando si verifica un errore. Provare.


7

Quando ho aggiunto module: 'jsr305'un'ulteriore dichiarazione di esclusione, tutto ha funzionato bene per me.

 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'jsr305'

})


6

Il problema, come indicato nei registri, è che 2 dipendenze tentano di utilizzare diverse versioni della terza dipendenza. Aggiungi una delle seguenti opzioni al file gradle app:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'

4
  1. La risposta accettata è un modo per risolvere il problema, poiché applicherà solo una strategia per la dipendenza problematica (com.google.code.findbugs: jsr305) e risolverà il problema attorno al progetto, usando una versione di questa dipendenza. Fondamentalmente allineerà le versioni di questa libreria all'interno dell'intero progetto.

  2. C'è una risposta di @Santhosh (e un paio di altre persone) che suggerisce di escludere la stessa dipendenza per l'espresso, che dovrebbe funzionare allo stesso modo, ma se il progetto ha altre dipendenze che dipendono dalla stessa biblioteca (com.google .code.findbugs: jsr305), di nuovo avremo lo stesso problema. Quindi per utilizzare questo approccio dovrai escludere lo stesso gruppo da tutte le dipendenze del progetto, che dipendono da com.google.code.findbugs: jsr305. Personalmente ho scoperto che Espresso Contrib e Espresso Intents usano anche com.google.code.findbugs: jsr305.

Spero che questi pensieri aiuteranno qualcuno a capire cosa sta succedendo esattamente qui e come funzionano le cose (non solo copiare e incollare un po 'di codice) :).


3

Aggiungilo alle dipendenze per forzare l'utilizzo dell'ultima versione della libreria findbugs:

compile 'com.google.code.findbugs:jsr305:2.0.1'

2

cancellare le dipendenze espresso nel file gradle funziona per me.

elimina quelle righe nel file gradle dell'app:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

3
Se elimini la dipendenza espresso non puoi più testare la tua app, quindi questa soluzione chiaramente non funziona.
Heinrich,

1

Coloro che ottengono lo stesso errore in Android 3.0.1, possono risolverlo semplicemente aggiornando le versioni di compileSdkVersion e targetSdkVersion a 27 e implementando anche com.android.support:appcompat-v7:27.1.1 'nelle dipendenze .


1

Nel progetto ': app' puoi aggiungere quanto segue al tuo file app / build.gradle:

android {
 configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
 }
 }

1

Per reattivo-nativo-base di fuoco , aggiungendo questo alla app/build.gradlesezione delle dipendenze ha funzionato per me:

implementation('com.squareup.okhttp3:okhttp:3.12.1') { force = true }
implementation('com.squareup.okio:okio:1.15.0') { force = true }
implementation('com.google.code.findbugs:jsr305:3.0.2') { force = true}

Questa è la prima volta che vedo il flag {force = true}. L'ho provato e ha funzionato subito per me. Avevo bisogno di mantenere androidx.appcompat su v1.0.2 per il mio progetto perché una libreria che ho aggiunto ha quella dipendenza impostata su v1.1.0.
MikeOscarEcho,

0

stavo cercando di utilizzare la spedizione deeplink di airbnb e ho riscontrato questo errore. dovevo anche escludere il gruppo findbugs dall'annotationProcessor.

//airBnb
    compile ('com.airbnb:deeplinkdispatch:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }
    annotationProcessor ('com.airbnb:deeplinkdispatch-processor:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }

0

REACT NATIVE

Se stai cercando una soluzione nativa reattiva, scrivi questo snippet nel file di build gradle node_modules interessato, ad esempio firebase nel mio caso.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.