Hibernate - java.lang.NoClassDefFoundError:org / slf4j / LoggerFactory

时间:2013-11-24 17:55:00

标签: java hibernate ant log4j runtime-error

我尝试使用hibernate和HSQLDB运行简单的程序。

我正在使用log4j log4j.properties# Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %c{1}:%L - %m%n # Root logger option log4j.rootLogger=INFO, stdout # Hibernate logging options (INFO only shows startup messages) log4j.logger.org.hibernate=INFO # Log JDBC bind parameter runtime arguments log4j.logger.org.hibernate.type=INFO

Ant

并且所有内容都使用schemaexport构建,构建文件可以see here

但是当我运行BUILD FAILED /home/nazar_art/workspace/Persistance/build.xml:64: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 目标时,我发现了下一个错误:

slf4j

schemaexport error

但是我没有使用lib这导致了什么?

这是我的slf4j-api-1.6.1.jar文件夹的内容,其中包含所有使用的jar文件:

lib struckture

我无法弄清楚为什么会这样?

这是更好的项目结构:

project struckture

修改

我添加了slf4j-log4j12-1.6.1.jar和{{1}},但它会抛出:

  

建立失败   /home/nazar_art/workspace/Persistance/build.xml:64:   java.lang.NoClassDefFoundError:javax / persistence / EntityListeners

你可以在这里看到它的外观:

entity listeners

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Hibernate在内部使用SLF4J来执行自己的日志记录。它是不同日志记录实现之上的抽象层。框架就像使用这个外观,因为在这种情况下你仍然独立于某些实现。您也可以使用log4j。按照this tutorial使其协同工作。

答案 1 :(得分:0)

Hibernate内部使用SLF4J进行日志记录。请阅读此处的设置说明:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#tutorial-firstapp-setup您需要在构建和运行时类路径上保留SLF4J jar