的NoClassDefFoundError

时间:2011-03-12 12:37:09

标签: java hibernate jetty

我正在使用hibernate并在使用hibernate时遇到错误,如下所示

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.cfg.Configuration
at com.ensarm.niidle.server.SchemaManager.getDatabaseSession(SchemaManager.java:60)
at com.ensarm.niidle.server.helper.UserServiceHelper.createNiidleUser(UserServiceHelper.java:27)
at com.ensarm.niidle.server.UserSignUpServlet.doPost(UserSignUpServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

请帮我解决 我已经将所有必需的hibernate jar文件添加到我的Web App的lib文件夹中。

现在该怎么办?

4 个答案:

答案 0 :(得分:6)

我怀疑你错过了一个log4j jar或一个commons-logging.jar。

消息Could not initialize class org.hibernate.cfg.Configuration表示JVM已经尝试过,但未能初始化类org.hibernate.cfg.Configurationsource code of the class包含以下行:

private static Log log = LogFactory.getLog( Configuration.class );

由于此字段标记为static,因此在类初始化时设置字段的值。此字段是此类的唯一静态成员,因此如果JVM无法初始化此类,则此字段一定存在问题。

答案 1 :(得分:4)

java.lang.NoClassDefFoundError是一个棘手的例外。这并不一定意味着班级不存在。相反,抛出它表示首次初始化类时存在一些问题。

当第一次访问此类遇到此问题(并在此处报告根问题)时,这尤其麻烦,但后续对类的访问只吐出可怕的java.lang.NoClassDefFoundError而没有任何引用原来的问题。

在这种情况下,您的配置可能包含错误,或者可能完全丢失了?

答案 2 :(得分:2)

阿尔詹说。您遇到的错误并不是说它无法找到cfg.Configuration。它只是说在cfg.Configuration初始化的某个地方,找不到类定义。你的日志中还有其他例外吗?

这让我觉得你的应用程序的WEB-INF / lib目录中缺少cfg.Configuration取决于你的类。

看看Spring论坛中的这个主题,他们似乎在谈论你遇到的问题:

http://forum.springsource.org/showthread.php?t=65296

特别是看到这篇由高级成员提到的帖子,他提到了另外四个缺少的罐子(请注意,这是在2008年,我不知道你正在使用什么样的hibernate和spring版本):

http://forum.springsource.org/showpost.php?s=f3b5de4e9df29e65d4c9acaafc1676c8&p=219678&postcount=10

希望它有所帮助。

答案 3 :(得分:0)

我只是使用Hibernate 3.5.4('java.lang.NoClassDefFoundError:无法初始化类org.hibernate.cfg.AnnotationConfiguration')得到一个非常相似的异常消息,它与日志记录有关,正如Luke Woodward指出的那样。所以我猜你错过了一个带有相应依赖关系的slf4j实现。

luis.espinal提供的链接(http://forum.springsource.org/showpost.php?s=f3b5de4e9df29e65d4c9acaafc1676c8&p=219678&postcount=10)指向您可能遗漏的可能JAR。其中有slf4j-log4j12-1.5.0.jar。

除此之外,在线hibernate文档中“First Hibernate Application”教程中的pom.xml包含对slf4j实现的显式引用:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/tutorial.html#tutorial-firstapp-setup

我正在使用Ant Maven任务,我的问题解决了将依赖项添加到slf4j-log4j12。