2015-09-28 21 views
6
2015-09-28 10:02:21,890 ERROR [STDERR] (HDScanner) SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding. 
2015-09-28 10:02:21,891 ERROR [STDERR] (HDScanner) SLF4J: Your binding is version 1.5.5 or earlier. 
2015-09-28 10:02:21,891 ERROR [STDERR] (HDScanner) SLF4J: Upgrade your binding to version 1.6.x. 
2015-09-28 10:02:21,891 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/metasolv-web]] (HDScanner) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 

Come posso risolvere questo errore? Inoltre, nella mia applicazione, non uso slf4j ovunque, solo la libreria Dozer lo usa. dallo stacktrace sottostante vedo che l'applicazione spring sta usando lo slf4j, ma perché non lo carica da solo?SLF4J: slf4j-api 1.6.x (o successivo) non è compatibile con questo binding

java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269) 
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156) 
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) 
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:191) 
+1

Aiuta se sai che slf4j ha due livelli. Il primo è il nucleo. Il secondo è i vincoli. Sembra che il core sia la versione 1.6 o successiva mentre il binding in questione è la versione 1.5.5 o inferiore. – Powerlord

+1

Se i file slf4j si trovano nella directory 'WEB-INF/lib', è possibile sostituire il jar di associazione slf4j per una versione più recente. In alternativa, se si utilizza Maven/Gradle, è possibile specificare una versione più recente del binding. – Powerlord

+1

@Powerlord come identifico la libreria di binding? Vedo 'jcl-over-slf4j' e' slf4j-api' nelle dipendenze. Capisco che il secondo è il nucleo. – Zeus

risposta

4

Ho dovuto escludere le esclusioni slf4j dalla libreria dozer e aggiungere dipendenze direttamente al file POM.

Come accennato da @Powerlord, ho dovuto aggiungere due librerie, una per il core slf4j e l'altra una libreria di rilegatura.

dipendenze Maven di seguito.

 <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.6.6</version> 
     </dependency> 

     <dependency> 
      <groupId>net.sf.dozer</groupId> 
      <artifactId>dozer</artifactId> 
      <version>5.5.1</version> 
      <exclusions> 
       <exclusion> 
        <artifactId>jcl-over-slf4j</artifactId> 
        <groupId>org.slf4j</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>slf4j-api</artifactId> 
        <groupId>org.slf4j</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
0

SLF4J è associato staticamente in base alla dipendenza.

Se si utilizza log4j, si dovrebbe avere l'associazione log4j nella propria applicazione.

Anche se non si utilizza slf4j, è necessario disporre di un'associazione (semplice o noop) per caricarla correttamente da una libreria dipendente.

+0

Dall'errore di cui sopra, vedo che ho bisogno della libreria slf4j, ma anche quando ho caricato la versione 1.5.5 o 1.7.5 della libreria, non elimina l'errore sopra riportato. – Zeus

+0

Vedere se aggiungere questa dipendenza oltre a slf4j-api aiuta http://mvnrepository.com/artifact/org.slf4j/slf4j-simple –

Problemi correlati