“NoClassDefFoundError:无法初始化类”错误

当我运行我的项目时,我得到了这个错误的许多输出:

Sep 9, 2009 8:22:23 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Jersey threw exception
java.lang.NoClassDefFoundError: Could not initialize class SpringFactory
        at com.point2.prospect.persistence.hibernate.HibernateTransactionInterceptor.doFilter(HibernateTrans
actionInterceptor.java:17)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.point2.prospect.restapi.ServerErrorInterceptor.doFilter(ServerErrorInterceptor.java:27)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

我注意到,这个问题有一种被网络问的模式,但没有真正的答案。 这种错误的一般原因是什么?


NoClassDefFound错误是一个模糊的错误,通常隐藏一个更严重的问题。 它与ClassNotFoundException不一样(当类不存在时抛出)。

NoClassDefFound可能表明该类不在那里,正如javadoc指出的那样,但是在类加载器加载类的字节并在其上调用“defineClass”之后,它通常会被抛出。 还仔细检查你的完整堆栈跟踪其他线索或可能的“原因”例外(尽管你的特定回溯显示没有)。

当你得到一个NoClassDefFoundError时,首先要看你的类的静态位,即在定义类时发生的任何初始化。 如果失败,它会抛出一个NoClassDefFoundError - 它应该抛出一个ExceptionInInitializerError,并指出问题的细节,但以我的经验来看,这很罕见。 它只会在第一次尝试定义类时执行ExceptionInInitializerError,之后它将只抛出NoClassDefFound。 所以看看早期的日志。

因此,我建议查看该HibernateTransactionInterceptor行中的代码并查看它所需的内容。 看来它无法定义类SpringFactory。 所以也许检查该类中的初始化代码,这可能会有所帮助。 如果你可以调试它,把它停在上面的最后一行(17)并进行调试,所以你可以试着找到导致异常的确切行。 还要检查日志中的更高级别,如果您非常幸运可能会出现ExceptionInInitializerError异常。


你错过了必要的班级定义; 通常由所需的JAR不在类路径中引起。

从J2SE API:

公共类NoClassDefFoundError扩展LinkageError

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分,或者作为使用新表达式创建新实例的一部分),并且没有找到该类的定义,则抛出它。

搜索到的类定义在编译当前正在执行的类时存在,但定义无法再找到。


我遇到了同样的问题,因为jar库是由其他Linux用户(root)复制的,并且登录用户(进程)没有足够的权限来读取jar文件内容。

链接地址: http://www.djcxy.com/p/46229.html

上一篇: "NoClassDefFoundError: Could not initialize class" error

下一篇: My class is not a servlet error