TomEE 8部署Java17编译的war包报Unsupported class file major version 61
根本原因
该报错并非系统运行Tomee的JRE版本过低导致,本质是apache-tomee-plume-8.0.8内置的org.apache.xbean.asm类解析依赖版本不支持识别Java 17的类格式(对应报错里提到的major version 61)。哪怕你用Java 17启动Tomee服务,服务内部扫描应用类文件的ASM库无法解析Java 17编译出的类,依然会抛出该异常。
可行解决方案
- 方案一:升级Tomee版本
直接升级到Apache Tomee 9.x及以上版本,该版本系列的内置依赖已经完成Java 17全适配,无需额外修改配置即可正常部署Java 17编译的应用。 - 方案二:替换Tomee内置依赖
如果暂时无法升级Tomee大版本,可以手动升级Tomee/lib目录下的xbean系列依赖:将xbean-asm9升级到4.20及以上版本,同时同步升级xbean-finder等关联依赖,避免出现版本不兼容问题。 - 方案三:降低编译字节码版本
如果不想调整服务端配置,可以修改项目的编译参数,将目标字节码版本降低到Java 11(Tomee 8.x官方支持的最高Java版本),只要你的业务代码没有用到Java 12及以上的独有特性,该方案最稳妥,不会引入额外的依赖兼容风险。
验证步骤
- 启动Tomee后查看服务默认首页的服务器信息,确认运行的JRE版本确实为Java 17,排除启动脚本调用了其他隐藏旧JDK的可能。
- 可以用
javap -verbose com/ui/AccountListLight\$SubListDataModel.class命令查看编译出的类文件的版本号,确认打包时没有被更高版本的JDK意外编译。
内容的提问来源于stack exchange,提问作者Diogo Salazar
相关产品推荐
相关产品推荐

