Java Tomcat在启动时突然抛出ClassFormatError

Java Tomcat在启动时突然抛出ClassFormatError,java,spring,tomcat,Java,Spring,Tomcat,我的项目有问题,经过一些测试后,我认为它与源代码无关。即使回到以前的工作版本,当我尝试部署到Tomcat时仍然会出现错误 该错误是由java.lang.ClassFormatError引起的org.springframework.beans.factory.BeanDefinitionStoreException,消息为截断类文件 我已经开始通过从等式中删除Eclipse来缩小问题的范围,但即使使用maven命令行构建并直接部署到tomcat实例,我仍然会遇到同样的问题。在谷歌上搜索错误时,有人

我的项目有问题,经过一些测试后,我认为它与源代码无关。即使回到以前的工作版本,当我尝试部署到Tomcat时仍然会出现错误

该错误是由
java.lang.ClassFormatError
引起的
org.springframework.beans.factory.BeanDefinitionStoreException
,消息为截断类文件

我已经开始通过从等式中删除Eclipse来缩小问题的范围,但即使使用maven命令行构建并直接部署到tomcat实例,我仍然会遇到同样的问题。在谷歌上搜索错误时,有人建议清除tomcat工作和临时目录,但我没有这么做

我知道这不是很多信息,但假设问题不在我的代码中,对我的系统的哪些更改可能会导致这个问题突然出现


堆栈跟踪

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.ClassFormatError: Truncated class file
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:239)
    ... 54 more
Caused by: java.lang.ClassFormatError: Truncated class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.loadClass(XBeanQNameHelper.java:102)
    at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.getBeanInfo(XBeanQNameHelper.java:72)
    at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.getPropertyDescriptor(XBeanNamespaceHandler.java:581)
    at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.addAttributeProperties(XBeanNamespaceHandler.java:333)
    at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:225)
    at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:276)
    at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:156)
    at org.apache.xbean.spring.context.v2.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:49)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    ... 59 more

看起来其中一个类文件已损坏,但问题是找到哪一个


调试的一种方法是使用eclipse的。启动tomcat,让它等待一个错误,然后中断抛出的java.lang.ClassFormatError,并查看eclipse中的局部变量和堆栈,看看哪个类无法加载。

遇到了与此完全相同的问题。所有web应用程序都会抛出相同的异常,并且它们不能全部损坏。还尝试删除并重新部署WAR,检查磁盘是否存在坏扇区等。最后通过删除并重新安装tomcat7进行修复

apt-get purge tomcat7
apt-get install tomcat7

根本原因仍然是个谜。

我尝试了很多方法来解决这个问题,但最终我发现了它,它不是.class文件损坏的问题。这损坏了存储在本地服务器(Tomcat7等)中的.class文件。所以

  • 请删除您的服务器
  • 清理项目(在菜单栏中:项目-->清理)
  • 将它再次添加到eclipse中
  • 项目清理并使用maven安装
  • 运行您的项目

  • 愉快地编码。

    如果您正在运行JSP,只需进入您的TOMCAT_HOME/work/Catalina/localhost/目录,查找您的Web应用程序的名称,然后将其cd放入目录树中,然后一直往下走,直到找到JSP类文件。。sudo rm-f*并重试


    不需要重新安装或重建任何东西,您所做的一切都没有损坏。。有时编译器会感到困惑。

    我删除了目标文件夹并进行了清理编译,现在一切都好了。

    问题是包含类文件的类文件/jar在某些地方损坏了。查找要获取此错误的类的包。若它是你们的文件,清理和重建,它应该解决这个问题。如果问题是由任何外部软件包引起的,请重新下载,它将解决您的问题


    如果您使用的是maven,请删除本地m2存储库并重新生成。

    如果您正在处理的类损坏,则可能会发生此类错误。如果问题与您正在处理的类有关,只需进行干净的构建,问题就会得到解决

    如果错误是由于第三方JAR/API引起的,那么在大多数情况下,重新下载相同的JAR/API将解决问题


    如果您使用的是构建工具/框架,请删除现有存储库并重新运行该工具

    是的,我正在处理的最后一个文件类可能会导致运行应用程序时出现问题。我从主类中取消调用该类文件,现在工作正常。

    这个问题在这一点上已经很老了,但我清楚地记得当时的情况,尽管是在4年前

    本例中此问题的底层原因是由于固件问题导致磁盘损坏。在其他情况下,由于内存故障或其他原因导致的磁盘故障,我也遇到过类似的情况

    我之所以在这么长时间后发布这篇文章,是因为我看到了很多针对这个问题的本地化解决方案的回复。YMMV和腐败可以在没有完全磁盘或内存故障的情况下发生,但是考虑这个答案是PSA。


    如果遇到此问题或类似问题,请花一些时间检查磁盘和RAM的完整性。这些类型的问题可能只是冰山一角

    谢谢,我明天会试试的。为什么即使在进行完整构建时,类文件也会持续损坏?也许我的工件出了问题。它可能像你的驱动器上坏扇区一样简单…也可能更复杂…但很难锁定点…是的,我的本地maven repo中的activemq类文件不知何故损坏了。从回购协议中删除这些文件修复了问题。谢谢。我们只有一个应用程序有这个问题。在本地,一切都可以工作,但当我们部署到其他区域时,会出现此错误。有时服务器重启会修复此问题,但有时会导致此问题。可能与Tomcat war解包有关?