2013-10-29 13 views
6

Ho un problema con la mia struttura delle dipendenze e più collegamenti SLF4J. Quello che ho scoperto finora è che di solito questo provoca solo un avvertimento, ma nel mio caso sembra per evitare che la mia esecuzione del programma: Queste sono le eccezioni che ricevo:Più collegamenti SLF4J causano un errore?

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding. SLF4J: Your binding is version 1.5.5 or earlier. SLF4J: Upgrade your binding to version 1.6.x. or 2.0.x Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

e questo è il pezzo rilevante della mia dipendenze: net.lightbody.bmp browsermob-proxy 2.0-beta-8

<!-- LOGGING DEPENDENCIES - LOG4J --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
    </dependency> 

qualcuno può dirmi come risolvere questo problema?

+0

Stai includendo 'slf4j-log4j12' più volte (direttamente o indirettamente tramite un'altra dipendenza) con diverse versioni (1.5.3 e 1.6.1, in base al messaggio di errore). – Jesper

risposta

15

Ci sono un paio di soluzioni a questo:

  • Assicurarsi che si includere un solo vaso slf4j (probabilmente con la versione più alto) se avete paio di loro con diverse versioni sul percorso della classe.
  • Talvolta potrebbe non essere possibile escludere più jar slf4j, poiché potrebbero essere utilizzati da altri contenitori internamente, che si trovano sul percorso della classe. Questi jar dipendenti possono fare riferimento a versioni differenti dei jar slf4j che causano il fallimento dell'applicazione. In questi casi, assicurati di avere il barattolo con la versione più alta di SLF4j aggiunto prima di altri jar usando i contenitori SLF4J. Ciò assicurerà che il tuo programma java acquisisca l'ultima versione di SLF4J che ovviamente è compatibile con le versioni precedenti.
+0

Grazie! La seconda soluzione ha funzionato per me. – Biffy

+0

@Ankur E come faccio ad assicurare in eclissi che ne rileggi l'ultima? –

+3

Specificare prima l'ultimo nel percorso di creazione del progetto. Per verificare il controllo dell'ordine .classpath del progetto. Mostrerà l'ordine in cui vengono aggiunti i file jar. –

1

Vorrei suggerire di utilizzare seguente dipendenza nel Maven, invece,

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.17</version> 
</dependency> 

Questo ha risolto il mio problema anche se non ho più dipendenze utilizzando slf4j.

0

Se il progetto ha dipendenza da altri progetti e l'altro uso slf4j anche con versione diversa tenta di utilizzare excusion

<exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
</exclusions> 
0

Si tratta di verificare se c'è più di un vaso. Per verificare se il barattolo è già disponibile o non andare al progetto -> risorse java -> dipendenze Maven e controllare se il barattolo è già disponibile lì o meno. Se è disponibile e ancora ottieni l'errore. Quindi trova la posizione di quel file jar nella cartella .m2 \ resources ed elimina la cartella completa relativa al file jar, quindi scarica una versione più recente e importala nel tuo progetto. :)

A volte ho errori anche io ho scaricato il file jar giusto con una versione corretta nel mio file pom.xml. Quindi ho bisogno di rimuoverlo dal mio pom.xml e scaricare quel jar da google e importarlo nel mio progetto. Assicurati che se lo fai non dimenticarti di andare a Proprietà del progetto -> scheda Assemblaggio di implementazione-> Fai clic su Aggiungi -> Voci del percorso di costruzione Java e fare clic su quel file jar e fare clic su Applica.