Java &引用;NoClassDefFoundError:无法初始化类";错误

Java &引用;NoClassDefFoundError:无法初始化类";错误,java,spring,exception,Java,Spring,Exception,当我运行我的项目时,我得到了这个错误的大量输出: 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.

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

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) 2009年9月9日上午8:22:23 org.apache.catalina.core.StandardWrapperValve 严重:Servlet的Servlet.service()引发异常 java.lang.NoClassDefFoundError:无法初始化类SpringFactory 位于com.point2.prospect.persistence.hibernate.HibernateTransactionInterceptor.doFilter(HibernateTrans actionInterceptor.java:17) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 位于com.point2.prospect.restapi.ServerErrorInterceptor.doFilter(ServerErrorInterceptor.java:27) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) 位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 运行(Thread.java:619)
我注意到这个问题有一种在网络上被问到的模式,但没有真正的答案。这种错误的一般原因是什么?

您缺少必要的类定义;通常由所需的JAR不在类路径中引起

发件人:

公共类NoClassDefFoundError 扩展链接错误

如果Java虚拟机或 ClassLoader实例尝试加载 在类的定义中(作为一部分) 属于普通方法调用或作为 使用新实例创建新实例 表达式),并且没有对 可以找到类

已搜索类定义 当前正在执行时存在 类已编译,但定义 再也找不到了


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

NoClassDefFound可能表明类不在那里,正如javadocs所指出的,但它通常在类加载器为类加载字节并调用“defineClass”后抛出。还要仔细检查完整堆栈跟踪,以查找其他线索或可能的“原因”异常(尽管特定的回溯跟踪没有显示任何异常)

当您得到NoClassDefFoundError时,首先要查看的是类的静态位,即在定义类期间发生的任何初始化。如果失败,它将抛出一个NoClassDefFoundError——它应该抛出一个ExceptionInInitializerError并指出问题的细节,但根据我的经验,这些很少。它只会在第一次尝试定义类时执行ExceptionInInitializerError,然后只抛出NoClassDefFound。因此,请看前面的日志

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

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

看到此错误时意识到我正在使用OpenJDK。一旦我安装了OracleJDK,它就被修复了

我有这个:

 class Util {
  static boolean isNeverAsync = System.getenv().get("asyncc_exclude_redundancy").equals("yes");
}
您可能会看到这个问题,env变量可能返回null而不是string。 为了验证我的理论,我把它改成:

 class Util {
  static boolean isNeverAsync = false;
}

问题就解决了。遗憾的是,Java无法提供错误的确切堆栈跟踪,这有点奇怪。

我最近在Windows 10上遇到了这个错误。事实证明,windows正在查找我的项目所需的.dll文件,但找不到它们,因为它是在系统路径path中查找的,而不是在类路径或-Djava.library.path中查找的。缺少的类的实际名称应该在某个嵌套的异常消息中。谢谢。把我的注意力转移到静态初始值设定项块上,省去了几个小时的烦恼。“例如,在定义类的过程中发生的任何初始化”——谢谢!另一个好主意是将日志通过管道传输到一个文件,并查找java.lang.ClassNotFoundException。其中可能有一个错误,它会告诉您它试图加载的类产生了所有NoClassDefFoundError异常。为我工作。还有一些需要补充的。。。我还发现,如果一个类没有找到它需要的类,则会出现NoClassDefFoundError。因此,对于它找不到的类,您将得到一个类not found异常,对于正在定义的类,您将得到一个NoClassDefFoundError异常。。。这一规则始终得到遵守。因此,如果它运行一次并失败,它将抛出ExceptionInInitializer