在我的项目中,我发现了这个异常org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException。怎么解决?

时间:2014-02-18 11:22:27

标签: eclipse tomcat7

org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
    at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:372)
    at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:232)
    at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:188)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113)
    at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignature(LookupEnvironment.java:1335)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromVariantTypeSignature(LookupEnvironment.java:1391)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeArgumentsFromSignature(LookupEnvironment.java:1172)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getTypeFromTypeSignature(LookupEnvironment.java:1340)
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethod(BinaryTypeBinding.java:550)
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethods(BinaryTypeBinding.java:630)
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom(BinaryTypeBinding.java:365)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:688)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:667)
    at org.eclipse.jdt.internal.compiler.Compiler.accept(Compiler.java:296)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:118)
    at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122)
    at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:168)
    at org.eclipse.jdt.internal.compiler.lookup.Scope.getPackage(Scope.java:2379)
    at org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference.internalResolveLeafType(ParameterizedQualifiedTypeReference.java:138)
    at org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference.internalResolveType(ParameterizedQualifiedTypeReference.java:132)
    at org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference.resolveType(ParameterizedQualifiedTypeReference.java:351)
    at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypeFor(SourceTypeBinding.java:1374)
    at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.fields(SourceTypeBinding.java:699)
    at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.faultInTypesForFieldsAndMethods(SourceTypeBinding.java:677)
    at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.java:469)
    at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:756)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:468)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:459)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我正在使用Apache Tomcat / 7.0.33,eclipse-jee-kepler-SR1-RC3-win32

12 个答案:

答案 0 :(得分:18)

非常感谢您的提示!在Tomcat 6.0.20和JDK1.8上遇到相同的ClassFormatException错误。用 ecj-4.2.2.jar 替换了jasper-jdt.jar,并将所有JSP再次编译/工作。

答案 1 :(得分:13)

问题与ecj版本(ecj-3.7.2.jar)有关,你必须使用与jdk8兼容的更新版本的tomcat(apache-tomcat-7.0.68对我来说很好)

答案 2 :(得分:5)

我希望以下步骤可以解决您的问题。

1)停止tomcat。

2)在此link

中下载ecj-4.2.2.jar

3)将ecj-4.2.2.jar复制到tomcat的lib文件夹下(例如 - C:\ apache-tomcat-6.0.36 \ lib)。

4)将ecj-3.7.2.jar重命名为old_ecj-3.7.2.jar。

5)启动tomcat。

答案 3 :(得分:2)

删除现有的localhost服务器并添加新服务器。这将解决您的问题。

答案 4 :(得分:2)

如果您使用maven和jdk8启动tomcat7,请确保tomcat7-maven-plugin的版本至少为2.2

答案 5 :(得分:1)

如果你使用的是java 8,也许你应该更新你的eclipse版本。

Eclipse doc

答案 6 :(得分:1)

通过堆栈跟踪中的信息,似乎内置的eclipse编译器存在编译问题,而不是javac。 Eclipse的所有Luna版本都支持jdk 8,但正如您提到的那样,您正在使用Eclipse Kepler,您必须从eclipse社区本身下载一个功能补丁才能支持jdk 8.

同时你可以使用jdk 7并重新编译你的项目。看看错误是否消失。除此之外,代码看起来很好。我希望它有所帮助。很乐意提供帮助。

答案 7 :(得分:1)

我在使用Tomcat 6和Java 8时遇到了同样的问题。我通过将Tomcat配置为使用Java 7而不是8来解决它:在JAVA_HOME=/usr/lib/jvm/java-7-oracle或您的自定义启动脚本中添加导出{tomcat-home}/bin/catalina.sh

答案 8 :(得分:1)

检查您的Tomcat版本。如果您的tomcat版本为7.0.29及更低版本 删除旧Tomcat并下载最新版本。并运行该项目 https://tomcat.apache.org/download-90.cgi

答案 9 :(得分:0)

请注意 1.我们无法更新Tomcat 6附带的ECJ版本,因为Tomcat 6必须能够在Java 1.5上运行,但是当前的ECJ版本需要最少的Java 6。

  1. 您可以使用可从http://www.eclipse.org/
  2. 下载的更高版本替换ecj - * .jar

    查看Tomcat Users邮件列表的档案,如果您有任何疑问,请在邮件列表中询问。 (Bugzilla不是支持论坛)。

    1. 可以将Tomcat配置为使用Java javac编译器而不是Eclipse

答案 10 :(得分:0)

在搜索了许多文章之后我也遇到了同样的问题我可以找到这个解决方案

您正在使用的Tomcat版本。

其次,对于Java 8,您必须使用支持Java 8的Eclipse ECJ编译器版本。

“ClassFormatException”可能意味着您的ECJ版本根本不了解Java 8。

将jre新版本更改为旧版本,因为它不支持此tomcat版本

答案 11 :(得分:0)

此问题是由于jdk,tomcat和Eclipse的兼容性问题引起的。 要解决此问题,请使用带有apache tomcat 8.0的jdk ver 1.8并更新Eclipse Mars 2.0。

我对Apache Tomcat 7.0也有同样的问题。

重新配置所有问题,您的问题将得到解决。