类未找到错误:org/slf4j/impl/StaticLoggerBinder

52

我正在尝试运行这个示例tiles,示例代码来源于这里

下面是我的POM.xml:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-api</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.2</version>
        </dependency>

我尝试运行以下示例时,抛出以下错误:

Sep 17, 2010 11:59:43 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class      org.apache.tiles.web.startup.TilesListener
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
at org.apache.tiles.web.startup.TilesListener.<init>(TilesListener.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)

有什么想法吗?

我花了30分钟在谷歌上搜索,但没有找到可能的解决方案。

请帮帮我...


每当您在使用库时遇到困难,最好检查依赖树并排除不需要的库! - Mateen
6个回答

125

你在应用程序中使用SLF4J API进行日志记录,但是你还必须包含一个实现真正的日志记录工作的库。

例如,如果要通过Log4J进行日志记录,则需要添加以下依赖项:

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

推荐的实现方式是logback-classic,它是Log4j的继承者,由相同的人制作SLF4J和Log4J:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>0.9.24</version>
</dependency>

注意:版本可能不正确。


7
准确来说,logback是log4j的一个分支,而不是其继承者。 - Thorbjørn Ravn Andersen
3
我已经添加了上述依赖项并且它有效了...“感谢各位的回复”。 - javanoob
16
Logback不是log4j的分支,实际上它是其继承者。它与Log4j没有共享代码,两个框架的创始人Ceki Gülcü在创建Logback时已经明确说明过:http://ceki.blogspot.fr/search?q=logback。 - Doc Davluz
2
对于Gradle:implementation 'org.slf4j:slf4j-log4j12:1.5.2' - moolsbytheway
我本来希望允许技术终端用户在运行时指定应用程序日志记录器绑定,而不是声明一个日志记录器实现依赖关系。但是我的尝试基于HelloWorld,使用java -cp slf4j-1.6.0 -jar HW.jar,并没有找到org.slf4j.impl.StaticLoggerBinder。如果我在清单中明确声明依赖关系,则可以正常工作,但我想将其放在命令行上。 - Kirk Bates
java -cp HW_lib\slf4j-simple-1.6.0.jar -jar HW.jar - Kirk Bates

12

您已经添加了sflj API的依赖项,但没有添加API实现的依赖项,这是一个单独的jar包,您可以尝试使用slf4j-simple-1.6.1.jar。


2
那对我有用。我已经在TomCat上使用这个应用程序多年了。尝试在JBoss 5.1.1上运行,它需要这个库。我不知道为什么它在TomCat上不需要。 - AgilePro

1
将所有的Tiles Jars(如tiles-jsp、tiles-servlet、tiles-template、tiles-extras和tiles-core)添加到您的服务器lib文件夹和应用程序构建路径中,如果您正在使用Apache Tiles与Spring MVC应用程序,则可以工作。

1
一个确保 SL4J 版本一致性的良好实践是将版本集中到像这样的属性中:
...
    <properties>
        <org.slf4j.version>1.5.2</org.slf4j.version><!-- SLF4J release -->
    </properties>
...
     <dependencies>
        <!-- SL4J with LOG4J implementation -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
...

0
我在使用Hibernate时遇到了同样的错误,我在我的pom.xml中添加了以下依赖项,问题得到了解决。
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.10</version>
    </dependency>

reference https://mvnrepository.com/artifact/org.slf4j/slf4j-api


是的,你说得对,但更改依赖版本解决了我的问题。OP有1.5.2,我粘贴了1.7.10。 - Mateen

-1

将主文件夹中的所有订单条目复制到您的/src/main/main.iml文件中。这将解决问题。


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