Type com.google.common.util.concurrent.ListenableFuture is defined multiple times – B4X Duplicate classes

Duplicate classes

La compilazione B4A fallisce perché la classe ListenableFuture è contenuta sia in guava-27.0.1-android.jar sia nell'artefatto listenablefuture separato. Escludendo il vecchio jar incorporato e dichiarando le dipendenze Maven corrette il compilatore vede una sola definizione.

Cosa significa questo errore?

La compilazione B4A fallisce perché la classe ListenableFuture è contenuta sia in guava-27.0.1-android.jar sia nell'artefatto listenablefuture separato. Escludendo il vecchio jar incorporato e dichiarando le dipendenze Maven corrette il compilatore vede una sola definizione.

Messaggio originale

Type com.google.common.util.concurrent.ListenableFuture is defined multiple times

Contesto e parole chiave

Alias

  • Guava duplicate classes
  • ListenableFuture duplicate

Messaggi alternativi

  • Compilation failed: the same ListenableFuture type is present in two archives

Prodotti

  • B4A
  • Guava

Piattaforme

  • Android

Parole chiave

  • b4a listenablefuture defined multiple times
  • excludedlib guava b4a
  • guava 27 duplicate classes b4a

Cause possibili

Dipendenza Guava incorporata e dipendenza separata sovrapposte

Una versione del jar Guava contiene già ListenableFuture, mentre il progetto aggiunge anche l'artefatto com.google.guava:listenablefuture. Il dexer individua due definizioni dello stesso tipo e interrompe la compilazione.

comune

Diagnosi

Le due origini del tipo nel log di compilazione

Cercare nel log i percorsi di guava-27.0.1-android.zip o jar e di com.google.guava:listenablefuture. La segnalazione deve indicare lo stesso tipo in entrambi gli archivi.

Come leggere il risultato. La presenza di entrambe le origini conferma una collisione di dipendenze e non un errore del codice applicativo.

Risoluzione

Escludere il jar Guava duplicato e usare Maven

Difficoltà: facileRischio: basso

Inserire le direttive nel modulo Main, rimuovendo dalla risoluzione il vecchio jar che contiene già la classe duplicata.

  1. Aggiungere le direttive nel Main del progetto B4A.
  2. Pulire il progetto e ricompilare per rigenerare il classpath.
  3. Verificare che il log non riporti più due archivi per ListenableFuture.
B4A
#ExcludedLib: guava-27.0.1-android.jar
B4A
#AdditionalJar: com.google.guava:guava
B4A
#AdditionalJar: com.google.guava:listenablefuture

Domande frequenti

Dove vanno inserite le direttive Guava?

Nel caso documentato vanno inserite nel modulo Main, così il compilatore B4A le applica alla risoluzione globale delle dipendenze.

Approfondimenti

Schede correlate