NoSuchMethodError with SLF4J API

前端 未结 8 1996
醉梦人生
醉梦人生 2021-01-03 19:19

When Use with slf4j,

String test = blahblahblah;
logger.info(\"{}\",test);

Trace as below

java.lang.NoSuchMethodError: org.         


        
相关标签:
8条回答
  • 2021-01-03 20:15

    In my case, I was getting the same "java.lang.NoSuchMethodError" deploying an EAR file to JBoss EAP 5.2.

    The logs showed:

    SLF4J: The requested version 1.5.6 by your slf4j binding is not compatible with [1.6]

    Logs: (server.log)

    2018-11-05 09:59:46,382 ERROR [STDERR] (main) SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    2018-11-05 09:59:46,395 ERROR [STDERR] (main) SLF4J: The requested version 1.5.6 by your slf4j binding is not compatible with [1.6]
    2018-11-05 09:59:46,395 ERROR [STDERR] (main) SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
    2018-11-05 09:59:46,402 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/common-scheduling/services]] (main) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at  
    

    Problem:

    The problem was having two different versions of slf4j-api jars on the classpath. (slf4j-log4j12-1.5.6.jar, slf4j-api-1.6.1.jar)

    Resolution:

    1. I ran "mvn dependency:tree" to find the location of the transitive dependency.
    2. Then, I added a maven exclusion tag to exclude the undesired artifact version.
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.5.6</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    
    0 讨论(0)
  • 2021-01-03 20:21

    Looks like you have a version mis-match between the various SLF4J API and integration libraries. SLF4J is extremely twitchy when it comes to version compatibility (e.g. 1.6.x is not backwards compatible with 1.5.x).

    Make sure the various JAR versions match, and make sure there are no duplicate JARs on the classpath.

    0 讨论(0)
提交回复
热议问题