java.lang.NoClassDefFoundError:org.slf4j.LoggerFactory

时间:2012-10-17 03:59:07

标签: java

运行Feed实用程序时,我收到如下所述的错误。我正在尝试加载图片“ 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)

24 个答案:

答案 0 :(得分:26)

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>

答案 1 :(得分:25)

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

答案 2 :(得分:11)

Download slf4j-1.7.5.zip

它包含不同的jar文件。

转到 - &gt;提取zip后的Integration文件夹并包含以下jar文件

  1. SLF4J-API-2.0.99
  2. SLF4J-简单-99年6月1日
  3. 的junit-3.8.1

答案 3 :(得分:5)

我尝试了其他解决方案,但异常并没有消失。因此,我使用Java反编译器反编译了整个jose4j 0.6.5 jar,并查看了其pom.xml。

我意识到它对 slf4j-api版本1.7.21 有特定的依赖性: enter image description here

因此,在项目的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 -> Maven ->更新项目中右键单击Project文件夹。)

答案 4 :(得分:5)

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

答案 5 :(得分:3)

我也有类似的问题。我有一个maven项目,正在测试rabbitmq。首先它向我展示了类似的错误,然后我在maven项目中添加了所有SLF4J依赖项,然后将错误更改为&#34; Maven SLF4J:类路径包含多个SLF4J绑定&#34;。以下是来自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> 

终于工作了。

答案 6 :(得分:2)

我遇到了类似的问题,它为我解决了这个问题。

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

答案 7 :(得分:2)

毫无疑问,完美的解决方案是将这些软件包添加到您的应用中:
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

答案 8 :(得分:1)

当我们使用slf4j api jar时,我们需要任何logger实现,如log4j。在我的系统上,我们有完整的设置,它工作正常。

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

答案 9 :(得分:1)

发生此错误是因为未在我们项目的订单和导出标签中检查引用的jar。

选择项目 - &gt; ALT + Enter-&gt; Java Build Path - &gt; Order and Export-&gt;检查必要的jar文件到您的项目中。

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

答案 10 :(得分:1)

更具体地说,如果您缺少班级 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并搜索确切的类名,以确定您缺少的确切依赖关系。

答案 11 :(得分:1)

您可以使用以下依赖性

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

答案 12 :(得分:1)

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

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

答案 13 :(得分:0)

我相信答案会在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>

答案 14 :(得分:0)

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

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

这对我有用/ properties / maven取消选中“解析来自Workspace项目的依赖关系”。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

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

答案 19 :(得分:0)

你需要slf4j-api库和slf4j-log4j12-1.7.25 jar。在项目中复制此罐子 - &gt; WEBINF-&GT; lib文件夹并在tomcat服务器lib文件夹中成功执行。

答案 20 :(得分:0)

你需要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均可用

答案 21 :(得分:0)

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

答案 22 :(得分:0)

使用maven,它将为您下载所有必需的jar文件。

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

SLF4J-log4j12-1.6.1.jar SLF4J-API-1.6.1.jar

这些罐子还取决于你正在运行的cassandra版本。  你可以使用cassandra版本,jar版本和jdk版本的依赖项。

您可以使用:jdk1.6 搭配:cassandra 1.1.12 和上面的罐子。

答案 23 :(得分:-1)

LoggerFactory类正在根据错误消息进行处理:

  

java.lang.NoClassDefFoundError:org.slf4j.LoggerFactory

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