Java.lang.IllegalAccessError: 尝试从类org.slf4j.LoggerFactory访问org.slf4j.impl.StaticLoggerBinder.SINGLETON字段是非法的。

5

运行我的GWT应用程序时,我遇到了这个错误。

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

不知道出了什么问题,您有什么想法吗?


7
http://www.slf4j.org/faq.html#IllegalAccessError - home
2个回答

21

这个问题是由于slf4j-log4j12 jar包的更改导致的。从1.5.6版本开始,它不再允许访问org.slf4j.impl.StaticLoggerBinder.SINGLETON字段。

要解决此问题,请使用最新的slf4j-api和slf4j-log4j12 jar包(或至少从版本1.5.6开始)。

<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>

2
我一直被SLF4J的向后兼容性问题困扰得要发疯了。这是一个多么荒谬的API啊。我永远不会有意使用SLF4J。我讨厌它。话虽如此,还是感谢你的回答。 :) - Bane
1
@Bane 我也一样。我花了太多时间在SLF4J问题上了。 - oyss

1

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

  1. 通过错误堆栈跟踪找出哪个依赖项引起了此问题
  2. 获取Maven依赖插件树。使用此树详细了解此库是否作为其他依赖项的一部分。在我的情况下,logback-classiclog4j-over-slf4j会导致此问题。它们一起出现在spring-boot-starter-web
  3. 在该依赖项的pom.xml中使用<exclusions><exclusion></exclusion></exclusions>排除引起此问题的库。在我的情况下,它看起来像这样:
         <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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接