【问题标题】:AbstractMethodError when try to initialize Spring尝试初始化 Spring 时的 AbstractMethodError
【发布时间】:2014-01-15 14:53:01
【问题描述】:

我正在使用 Spring、vaadin 和 maven 开发一个应用程序,例如工具 di 项目管理。 现在当尝试执行 jetty:run 我得到以下错误:

java.lang.AbstractMethodError: org.slf4j.impl.Log4jLoggerAdapter.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:272)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)

这是我的 pom.xml

  <!-- Logging dependencies   -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>com.springsource.org.apache.commons.logging</artifactId>
        <version>1.1.1</version>
    </dependency>


    <!-- Log4J dependencies -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>com.springsource.slf4j.log4j</artifactId>
        <version>1.5.6</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>com.springsource.slf4j.api</artifactId>
        <version>1.5.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.log4j</groupId>
        <artifactId>com.springsource.org.apache.log4j</artifactId>
        <version>1.2.15</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-ext</artifactId>
        <version>1.7.1</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.1</version>
        <scope>runtime</scope>
    </dependency>

     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
         <exclusions>
        <!-- Exclude Commons Logging in favor of SLF4j -->
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
        <version>${spring.version}</version>
    </dependency>

如何解决这个问题?

【问题讨论】:

  • 您的日志库之间存在兼容性问题。
  • 为什么包含com.springsource slf4j 工件,为什么会有这么多不同的版本?顺便说一句,这个错误通常意味着 API 类正在定义一个抽象方法,但您正在拉入未实现该方法的旧版本的实现类。
  • 对我必须改变什么来解决它有什么建议吗?

标签: java spring maven log4j slf4j


【解决方案1】:

我解决了评论这两个依赖项:

     <!-- Log4J dependencies 
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>com.springsource.slf4j.log4j</artifactId>
        <version>${slf4j.log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>com.springsource.slf4j.api</artifactId>
        <version>${slf4j.log4j.api.version}</version>
    </dependency>
    -->

【讨论】:

    【解决方案2】:

    与您管理的日志记录依赖项存在冲突。将您的依赖项替换为以下内容:这将解决您的依赖项问题

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.6.1</version>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.15</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.sun.jdmk</groupId>
                        <artifactId>jmxtools</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.sun.jmx</groupId>
                        <artifactId>jmxri</artifactId>
                    </exclusion>
                </exclusions>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>0.9.26</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>0.9.26</version>
            </dependency>
    

    【讨论】:

    • 即使使用此依赖层次结构也会出现相同的错误。
    • @ChandraMohan ...这与您的依赖版本有关。你可以发布你的pom吗?
    【解决方案3】:

    对我来说,解决方案是将 logback 从 4.7 升级到 5.0

    <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.0</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2017-08-04
      • 2015-10-06
      相关资源
      最近更新 更多