【问题标题】:java.lang.NoClassDefFoundError: org.slf4j.LoggerFactoryjava.lang.NoClassDefFoundError: org.slf4j.LoggerFactory
【发布时间】:2012-10-17 03:59:07
【问题描述】:

我在运行提要实用程序时收到如下所述的错误。我正在尝试加载图像“logo.png”。 slf4j jar 文件也可以在运行时类路径中找到。但我仍然收到此错误。

Oct 16, 2012 7:34:11 PM com.ibm.commerce.foundation.dataload.FeedRetriever  invokeDataLoad
SEVERE: An error occurred while performing data load.
Throwable occurred: com.ibm.commerce.foundation.dataload.exception.DataLoadException: 
An error occurred while executing the data load. 

java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory

    at com.ibm.commerce.foundation.dataload.DataLoaderMain.execute(DataLoaderMain.java:664)
    at com.ibm.commerce.content.commands.DataLoadInvoker.execute(DataLoadInvoker.java:101)
    at com.ibm.commerce.foundation.dataload.FeedRetriever.invokeDataLoad(FeedRetriever.java:244)
    at com.ibm.commerce.foundation.dataload.FeedRetriever.execute(FeedRetriever.java:172)
    at com.ibm.commerce.foundation.dataload.FeedRetriever.main(FeedRetriever.java:321)
Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory
    at com.ibm.commerce.foundation.dataload.DataLoaderMain.execute(DataLoaderMain.java:488)
    ... 4 more
Caused by: java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory
    at org.apache.wink.client.ClientConfig.<clinit>(ClientConfig.java:52)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
    at com.ibm.commerce.foundation.dataload.feedreader.AtomReader.getFeed(AtomReader.java:104)
    at com.ibm.commerce.foundation.dataload.feedreader.AtomReader.getEntries(AtomReader.java:147)
    at com.ibm.commerce.foundation.dataload.feedreader.AtomReader.getEntries(AtomReader.java:1)
    at com.ibm.commerce.foundation.dataload.feedreader.BaseFeedReader.init(BaseFeedReader.java:252)
    at com.ibm.commerce.foundation.dataload.AbstractBusinessObjectLoader.initializeDataReaders(AbstractBusinessObjectLoader.java:1344)
    at com.ibm.commerce.foundation.dataload.AbstractBusinessObjectLoader.init(AbstractBusinessObjectLoader.java:369)
    at com.ibm.commerce.foundation.dataload.BusinessObjectLoader.init(BusinessObjectLoader.java:65)
    at com.ibm.commerce.foundation.dataload.DataLoaderMain.execute(DataLoaderMain.java:431)
    ... 4 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.lang.ClassNotFoundException.<init>(ClassNotFoundException.java:76)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:396)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
    ... 16 more
Oct 16, 2012 7:34:11 PM com.ibm.commerce.foundation.dataload.FeedRetriever main
SEVERE: An error occurred while performing data load.
Throwable occurred: com.ibm.commerce.foundation.dataload.exception.DataLoadException: An error has occurred.  If this problem persists, contact product support.
    at com.ibm.commerce.foundation.dataload.FeedRetriever.invokeDataLoad(FeedRetriever.java:247)
    at com.ibm.commerce.foundation.dataload.FeedRetriever.execute(FeedRetriever.java:172)
    at com.ibm.commerce.foundation.dataload.FeedRetriever.main(FeedRetriever.java:321)

【问题讨论】:

  • 库文件夹中有 sl4j jar 吗?如果没有,请尝试将其添加到其中并执行,我希望它对您有用..
  • slf4j jar 在库文件夹中可用。多次尝试执行。还是不行!
  • 尝试使用 slf4j-api-1.6.0.jar。它包含 LoggerFactory。
  • @aLearner 谢谢。它成功了。
  • 我从 maven repo 复制了 maven 依赖:----------- org.slf4j slf4j-simple1.7.25test -------- 好吧,这是该死的范围!只需删除或注释掉范围行,然后再次尝试运行您的应用。

标签: java


【解决方案1】:

Add a SLF4J implementation (as you only have its API):

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

【讨论】:

    【解决方案2】:

    您必须在类路径中提供各种 SLF4J 实现 .jar 文件之一,以及接口 .jar 文件。这是记录在案的。

    【讨论】:

    • jar文件,目前在库中有slf4j-api-1.6.1.jar、slf4j-jdk14-1.6.1.jar、slf4j-log4j12-1.6.1.jar和slf4j-simple -1.6.1.jar。您能否建议我必须包含在库中的正确实现和接口 jar。
    • 在库中包含 slf4j-api-1.6.6.jar 文件。它不工作。将 jar 包含在库中是否足够?否则我必须设置类路径。如果可以,请指导我如何设置类路径!感谢您的帮助!
    • 您可能会因版本不匹配而导致此错误,例如slf4j-apislf4j-log4j12。按照@Gk 的建议尝试随机版本的单个罐子。和其他答案可能会巧合地解决它,但真正的答案只是确保正在加载的 jar 都是相同的版本。
    • “这已被记录在案。”哈好吧,显然不够好!
    • 我发现@EJP 语气在字里行间不必要地挑衅,无论他提供的答案元素是否准确。
    【解决方案3】:

    Download slf4j-1.7.5.zip

    它包含不同的 jar 文件。

    解压后转到 -> 集成文件夹并包含以下 jar 文件

    1. slf4j-api-2.0.99
    2. slf4j-simple-1.6.99
    3. junit-3.8.1

    【讨论】:

      【解决方案4】:

      右键单击项目属性并按照以下步骤“项目属性”->“部署程序集”,添加“Java 构建路径条目-> Maven 依赖项”

      【讨论】:

        【解决方案5】:

        我尝试了其他解决方案,但异常并没有消失。于是我用Java Decompiler反编译了整个jose4j 0.6.5 jar,并查看了它的pom.xml。

        我意识到它对 slf4j-api, version 1.7.21 有特定的依赖关系:

        所以在我项目的 pom.xml 中,我添加了完全相同的依赖项,更新了我的 Maven 项目,以便它将这个 jar 下载到我的存储库中并且异常消失了。

        但是它可能会带来另一个由 slf4j 本身引起的错误:

        SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
        SLF4J: Defaulting to no-operation (NOP) logger implementation
        SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
        

        为了解决这个问题,我在我的项目的 pom.xml 中添加了以下内容。因此,您需要将以下内容添加到您的 pom.xml 中,我的 jose4j 运行时没有任何问题:

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>   
        
        <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-simple</artifactId>
           <version>1.6.4</version>
        </dependency>
        

        修改pom.xml后记得更新你的Maven项目。

        (在Eclipse中右键Project文件夹-&gt;Maven-&gt;Update Project..)

        【讨论】:

          【解决方案6】:

          我也有类似的问题。我有一个 Maven 项目,正在测试 rabbitmq。首先它向我显示了类似的错误,然后我在 maven 项目中添加了所有 SLF4J 依赖项,然后错误更改为“Maven SLF4J:类路径包含多个 SLF4J 绑定”。这是 pom.xlm 的完整依赖项列表

          <dependencies>
              <dependency>
                  <groupId>com.rabbitmq</groupId>
                  <artifactId>amqp-client</artifactId>
                  <version>4.0.0</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.commons</groupId>
                  <artifactId>commons-lang3</artifactId>
                  <version>3.0</version>
              </dependency>
              <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-simple</artifactId>
                 <version>1.7.21</version>
                 <scope>compile</scope>
              </dependency>
          </dependencies> 
          

          终于成功了。

          【讨论】:

          • 在从 RabbitMQ 的 V3.4 迁移到 V4.0 时,我也遇到过这种情况。如果您查看 RabbitMQ 源,它使用了一个旨在成为 SLF4J 的“记录器”实例。如果您直接将 Log4J 用作“记录器”,则会引发异常。在 RabbitMQ 的 POM 中查看此内容:1.7.21
          【解决方案7】:

          我遇到了类似的问题,下面一行为我解决了这个问题。

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

          编辑:我意识到我正在使用 spring boot,并且依赖的版本是从 spring-boot-starter-parent 中提取的。

          【讨论】:

          • 你需要版本字段,这里没有
          • 谢谢@AlexanderMills!
          【解决方案8】:

          你可以使用下面的依赖

          <dependency>
                  <groupId>log4j</groupId>
                  <artifactId>log4j</artifactId>
                  <version>1.2.17</version>
              </dependency>
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-api</artifactId>
                  <version>1.7.7</version>
              </dependency>
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-log4j12</artifactId>
                  <version>1.7.7</version>
              </dependency>
          

          【讨论】:

            【解决方案9】:

            将以下 jars 添加到类路径或 lib 文件夹中

            1. slf4j-api-1.7.2.jar
            2. slf4j-jdk14-1.7.2.jar

            【讨论】:

              【解决方案10】:

              毫无疑问,完美的解决方案是将这些包添加到您的应用中:
              https://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.2
              http://archive.apache.org/dist/logging/log4j/1.2.16/

              添加后您可能会遇到以下警告,您可以直接忽略!

              SLF4J:未找到 SLF4J 提供程序。 SLF4J:默认为无操作(NOP)记录器实现 SLF4J:详情请见http://www.slf4j.org/codes.html#noProviders

              学分: https://www.javacodegeeks.com/2018/02/fix-exception-thread-main-java-lang-noclassdeffounderror-org-slf4j-loggerfactory-java.html

              【讨论】:

                【解决方案11】:

                出现此错误是因为我们项目的订单和导出选项卡中未检查引用的 jar。

                Choose Project ->ALT+Enter->Java Build Path ->Order and Export->检查必要的jar文件到你的项目中。

                最后清理你的项目并运行。它将成功运行。

                【讨论】:

                  【解决方案12】:

                  更具体地说,如果您缺少类 com.vaadin.external.org.slf4j.LoggerFactory,请添加以下依赖项。

                  <dependency>
                      <groupId>com.vaadin.external.slf4j</groupId>
                      <artifactId>vaadin-slf4j-jdk14</artifactId>
                      <version>1.6.1</version>
                  </dependency>
                  

                  如果您缺少任何其他 org.slf4j.LoggerFactory,只需转到 Maven central class name search 并搜索确切的类名以确定您缺少的确切依赖项。

                  【讨论】:

                    【解决方案13】:

                    当我们使用 slf4j api jar 时,我们需要任何像 log4j 这样的记录器实现。在我的系统上,我们拥有完整的套件,并且运行良好。

                    1. slf4j-api-1.5.6.jar
                    2. slf4j-log4j12-1.5.6.jar
                    3. **log4j-1.2.15.jar**
                    

                    【讨论】:

                      【解决方案14】:

                      我相信答案已在 slf4j 网站 (Failed to load class org.slf4j.impl.StaticLoggerBinder) 上列出

                      对于一个非常快速的解决方案,我建议添加无操作 (NOP) 记录器实现 (slf4j-nop.jar)

                      例如,如果使用 maven:

                      <dependency>
                          <groupId>org.slf4j</groupId>
                          <artifactId>slf4j-nop</artifactId>
                          <version>${slf4j-nop-version}</version>
                      </dependency>
                      

                      【讨论】:

                        【解决方案15】:

                        使用 maven,它会为你下载所有需要的 jar 文件。

                        在这种情况下,您需要以下 jar 文件:

                        slf4j-log4j12-1.6.1.jar slf4j-api-1.6.1.jar

                        这些 jars 还取决于您正在运行的 cassandra 版本。 您使用的 cassandra 版本、jar 版本和 jdk 版本存在依赖关系。

                        你可以使用:jdk1.6 与:卡桑德拉 1.1.12 和上面的罐子。

                        【讨论】:

                          【解决方案16】:

                          确保您的 MANIFEST.MF 包含在我的应用程序中引用的 jar 的名称是 slf4j-api-*。罐子

                          【讨论】:

                            【解决方案17】:

                            您需要 slf4j-api 库。大多数情况下只需要 slf4j-api 和 slf4j-jkd14:

                            Here你可以下载1.7.2版本:

                            slf4j-api-1.7.2.jar
                            slf4j-jkd14-1.7.2jar
                            

                            如果您需要一个示例来了解如何使用它们,请参阅本教程: http://www.ibm.com/developerworks/java/library/j-hangman-app/index.html

                            教程的所有code都可用

                            【讨论】:

                              【解决方案18】:

                              获取此 jar slf4j-jdk14 的兼容版本并将其添加为依赖项。 这解决了我的问题。

                              【讨论】:

                                【解决方案19】:

                                您需要 slf4j-api 库和 slf4j-log4j12-1.7.25 jar。将这个jars复制到你的project->WEBINF->lib文件夹和tomcat server lib文件夹中即可成功执行。

                                【讨论】:

                                  【解决方案20】:

                                  当您从 maven 存储库复制依赖项时:

                                  <scope>test</scope>
                                  

                                  尝试像这样从 pom.xml 中的依赖项中删除它。

                                  <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
                                  <dependency>
                                      <groupId>ch.qos.logback</groupId>
                                      <artifactId>logback-classic</artifactId>
                                      <version>1.2.3</version>
                                  </dependency>
                                  

                                  这对我有用。我希望它对其他人有帮助。

                                  【讨论】:

                                    【解决方案21】:

                                    这对我有用 /properties/maven 取消选中解决来自工作区项目的依赖项。

                                    【讨论】:

                                      【解决方案22】:

                                      首先,检查依赖层次结构,而不是将所有 slf4j jar 从其他依赖项中排除并添加单独的 slf4j 作为依赖项。

                                      【讨论】:

                                        【解决方案23】:

                                        如果你遇到 java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory

                                        在项目的库文件夹中添加slf4j-log4j12 jar

                                        【讨论】:

                                          【解决方案24】:

                                          根据错误消息,LoggerFactory 类正在消失:

                                          java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory

                                          显然,slf4j.jar 文件由于某种原因没有被加载。

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多