【问题标题】:java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory after building .jar with NetBeans [duplicate]java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 使用 NetBeans 构建 .jar [重复]
【发布时间】:2015-04-02 20:10:36
【问题描述】:

我将我的项目从 eclipse 移到了 netbeans,现在当我在构建后尝试运行 .jar 文件时收到 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 错误。该程序运行良好

这是我的类路径中的内容:

slf4j-api-1.7.11.jar
slf4j-ext-1.7.11.jar
log4j-1.2.17.jar

这是我的记录器:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Log {

    public static final Logger logger = LoggerFactory.getLogger(Log.class); 

    public Log(){

    }
}

log4j.properties:

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log

log4j.appender.file.File=C:\\Log.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

当我想记录一些东西时我会调用什么(这就是它爆炸并抛出错误的地方):

Log.logger.info("");

例外:

Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at com.xxx.xxxx.Log.<clinit>(Log.java:8)
        at com.xxx.xxxx.MainGui.PrintHeaderForLog(MainGui.java:319)
        at com.xxx.xxxx.MainGui.<init>(MainGui.java:69)
        at com.xxx.xxxx.MainGui.<clinit>(MainGui.java:48)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 4 more

【问题讨论】:

  • 看起来这是一个tomcat web应用?每个 slf4j jar 具体部署在哪里?您能否编辑您的问题以包含您收到的此异常的完整堆栈跟踪?
  • 它是一个简单的 java 程序,我只是将它用作记录器。当我用 eclipse 构建它时它正在工作。我已经添加了例外。
  • 另外,我的 log4j.properties 文件位于 src 目录中。
  • 我在您的 log4j.properties 中看到了 catalina 引用,并认为它可能是 stackoverflow.com/q/24342963/13317。但看起来你的类路径中缺少 slf4j-api。

标签: java netbeans log4j slf4j


【解决方案1】:

可能由于某种原因 slf4j.jar 没有被加载。您可以在类路径中包含一些 jar:

  • slf4j-log4j12
  • slf4j-简单.. 毕竟清理您的项目并运行。它将成功运行。

【讨论】:

  • 当我添加这两个,清理和构建时,我得到了这个:SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C://workspace/External_Jar_Files/slf4j-1.7.11/ slf4j-log4j12-1.7.11.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:在 [jar:file:/C:/workspace/External_Jar_Files/slf4j-1.7.11/slf4j-simple-1.7 中找到绑定.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  • 尝试从你的类路径中删除slf4j-log4j12-1.7.11.jar
【解决方案2】:

如果您在启动 Tomcat 服务器时收到“java.lang.NoClassDefFoundError: Lorg/slf4j/Logger”,

  1. 那么要么你没有正确复制共享的tomcat,要么
  2. “apache tomcat/conf/catalina.properties”文件存在问题。

解决方案

  1. 下载新的 Apache Tomcat 服务器并使用它。
  2. 删除现有服务器,从下载中复制服务器并再次将其粘贴到相同位置并使用它。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多