【问题标题】:In my project I found this exception org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException. How to resolve it?在我的项目中,我发现了这个异常 org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException。如何解决?
【发布时间】:2014-02-18 11:22:27
【问题描述】:
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

【问题讨论】:

  • 看起来像一个tomcat问题。你用的是什么tomcat版本,eclipse版本,jvm版本?
  • Tomcat 现在使用捆绑的 Eclipse 编译器来编译 JSP——它与所使用的 IDE 本身无关。我的问题是:您使用的是什么版本的 JDK?

标签: eclipse tomcat7


【解决方案1】:

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

【讨论】:

  • 这应该是评论
  • 帮我解决了问题!
  • 将此 jar ecj-4.2.2.jar 文件添加到您的 tomcat_install_folder/lib/ecj-4.2.2.jar 并停止 tomcat 服务器并删除或重命名旧版本的 ecj,如 old_ecj-3.6 .jar 并启动你的 tomcat 服务器它为我工作而无需触摸 jasper-jdt.jar bcz 它在我的 lib 文件夹中不存在
  • 解决了我的问题,没注意到我更改了 JRE_HOME 路径。
  • 唷,这个拯救了我的一天!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    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。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            Eclipse doc

            【讨论】:

              【解决方案8】:

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

              同时您可以使用 jdk 7 并重新编译您的项目。看看错误是否消失。除此之外,代码对我来说看起来不错。我希望它有所帮助。乐于助人。

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

                  您使用的是哪个版本的 Tomcat。

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

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

                  将jre新版本改为旧版本,因为它不支持这个tomcat版本

                  【讨论】:

                    【解决方案11】:

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

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

                    查看 Tomcat 用户邮件列表的存档,如果您有任何问题,请在邮件列表中提问。 (Bugzilla 不是支持论坛)。

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

                    【讨论】:

                      【解决方案12】:

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

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

                      全部重新配置,你的问题就解决了。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-08-01
                        • 1970-01-01
                        • 2021-11-25
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多