【问题标题】:NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinderNoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
【发布时间】:2011-04-13 20:56:07
【问题描述】:

我正在尝试运行给定here 的示例图块示例。

下面是我的 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 分钟在谷歌上搜索,但找不到可能的解决方案。

请帮帮我...

【问题讨论】:

  • 当你发现库有困难时,最好检查依赖树并排除不需要的库!

标签: java tiles slf4j


【解决方案1】:

您已经包含了对 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>

注意:版本可能不正确。

【讨论】:

  • 准确来说,logback 是 log4j 的一个分支,而不是继承者。
  • org.slf4jslf4j-log4j121.5.2 添加了上述依赖和它起作用了...Thanks guys for all replies
  • Logback 不是 log4j 的一个分支,实际上它是一个继承者。它并没有真正与 Log4j 共享代码,这两个框架的创建者 Ceki Gülcü 已经明确表示在创建它时:ceki.blogspot.fr/search?q=logback
  • 对于 gradle:implementation 'org.slf4j:slf4j-log4j12:1.5.2'
  • 我曾希望允许技术最终用户能够在运行时指定应用程序记录器绑定 - 而不是声明记录器实现依赖项。但是我的尝试,基于 HelloWorld,使用 java -cp slf4j-1.6.0 -jar HW.jar 没有找到 org.slf4j.impl.StaticLoggerBinder。如果我在清单中明确声明依赖关系,它就可以工作 - 但我想把它放在命令行上。
【解决方案2】:

你已经包含了sflj的api的依赖,但没有包含api实现的依赖,是一个单独的jar,你可以试试slf4j-simple-1.6.1.jar。

【讨论】:

  • 这对我有用。我多年来一直在 TomCat 上使用该应用程序。尝试在 JBoss 5.1.1 上运行,它需要这个库。我不知道为什么它在 TomCat 上不需要它.....
【解决方案3】:

将所有的tile jars(tiles-jsp,tiles-servlet,tiles-template,tiles-extras.tiles-core)添加到您的服务器lib文件夹和您的应用程序构建路径,然后如果您使用apache tailes和spring,它就可以工作mvc 应用程序

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      我在使用 hibernate 时遇到了同样的错误,我在 pom.xml 中添加了以下依赖项来解决问题

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

      参考 https://mvnrepository.com/artifact/org.slf4j/slf4j-api

      【讨论】:

      • 什么是 OP?请解释
      • OP 代表 Original Poster(提交此问题的人)。
      • 是的,你是对的,但是更改依赖版本为我解决了这个问题。 op 有 1.5.2 我已经粘贴了 1.7.10
      【解决方案6】:

      确保 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>
      ...
      

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 2014-06-17
        • 2021-07-08
        相关资源
        最近更新 更多