java.lang.IllegalAccessError:尝试从类org.slf4j.LoggerFactory访问字段org.slf4j.impl.StaticLoggerBinder.SINGLETON

时间:2012-01-27 08:05:16

标签: java gwt

我在运行GWT应用程序时遇到此错误。

我在类路径中有这些jar文件:slf4j-api& slf4j-log4j12

任何想法可能是什么原因?

2 个答案:

答案 0 :(得分:19)

此问题是由于slf4j-log4j12 jar的更改造成的。从版本1.5.6开始,它不允许访问字段org.slf4j.impl.StaticLoggerBinder.SINGLETON。

要解决此问题,请使用最新的jar(或至少版本1.5.6以上)slf4j-api& SLF4J-log4j12。

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

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

答案 1 :(得分:0)

终于在我的 SpringBoot 应用中解决了这个问题。如果更新版本没有帮助,这可能会有所帮助。有时其他库可能会带来此依赖项的不同版本。这些是步骤:

  1. 通过错误堆栈跟踪找出导致此问题的依赖项
  2. 获取 maven 依赖插件树。使用此树详细信息可了解此库是否作为其他依赖项的一部分出现。就我而言,logback-classiclog4j-over-slf4j 出现了这个问题。他们在spring-boot-starter-web
  3. 之下走到了一起
  4. 在该依赖项中的 <exclusions><exclusion></exclusion></exclusions> 中使用 pom.xml 来处理出现此问题的库。就我而言,它看起来像这样:
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>logback-classic</artifactId>
                    <groupId>ch.qos.logback</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j-over-slf4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

参考文献:
http://www.slf4j.org/faq.html#IllegalAccessError
http://www.slf4j.org/codes.html#multiple_bindings