You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 8.5.74搭配JRE17启动报ClassFormatException及UI异常求助

Tomcat 8.5.74 + JRE 17.0.9 环境异常排查与解决

问题描述

使用Tomcat 8.5.74搭配JRE 17.0.9搭建运行环境,服务器启动后日志抛出org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException异常,同时UI界面存在部分按钮无法正常工作的情况。

异常日志

org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.lassFilejdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:406)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:231)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:207)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:174)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:201)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.lookup.BlockScope.getBinding(BlockScope.java:500)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.resolveType(QualifiedNameReference.java:999)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:636)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:684)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1026)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:117)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.DoStatement.resolve(DoStatement.java:226)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:117)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:276)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolveUsing(Block.java:130)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.TryStatement.resolve(TryStatement.java:1073)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:117)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.DoStatement.resolve(DoStatement.java:226)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:117)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:276)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolveUsing(Block.java:130)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.TryStatement.resolve(TryStatement.java:1073)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.Block.resolveUsing(Block.java:130)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.TryStatement.resolve(TryStatement.java:1073)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:634)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:306)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:544)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1195)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1308)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:593)
INFO   | jvm 1    | 2024/03/07 10:09:35 |       at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:867)

问题原因

Tomcat 8.5.x官方兼容的JDK版本范围是JDK 8 至 JDK 11,JRE 17属于高版本,超出其兼容范围。Tomcat内置的JDT编译器无法正确解析高版本JRE环境下的类文件格式,从而抛出ClassFormatException;部分UI按钮失效则是因为相关Servlet或JSP文件编译失败,导致对应的功能无法正常加载。

解决方案

  • 版本匹配调整:
    • 降级JRE至Tomcat 8.5.x支持的版本(如JRE 8或JRE 11),确保运行环境版本兼容。
    • 若必须使用JRE 17,升级Tomcat至9.0.x及以上版本(Tomcat 9支持JDK 8至JDK 17),同步更新编译器与运行环境的兼容性。
  • 清理编译缓存:删除Tomcat安装目录下的work文件夹,清除旧的编译生成文件,避免残留的不兼容文件干扰运行。
  • 项目编译检查:确认项目中的类文件是否由高于JRE 11的JDK编译,若存在此类文件,重新用兼容版本的JDK编译项目后再部署。

内容的提问来源于stack exchange,提问作者jagadeesh kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:44:49