升级Java11到17、WildFly23到24后遇Unsupported class file major version 61错误
问题解答
1. 当前class文件是否为Java17版本?
是的。Unsupported class file major version 61这个报错明确对应Java17的class文件版本(Java版本与class文件主版本号对应关系:Java17=61、Java16=60,以此类推),说明你的项目已经成功编译为Java17版本的class文件。
2. 是否因spring-core 5.2.2与Java17不兼容导致?
完全正确。Spring Framework 5.2.x系列官方支持的最高Java版本为Java14,不兼容Java17。同时,Spring 5.2.2依赖的ASM版本(通常为ASM 7.x)无法解析Java17的class文件(ASM 9.0及以上版本才支持Java17),这就是你遇到ASM ClassReader无法解析报错的核心原因。
3. 解决方法
方案一:升级Spring版本到兼容Java17的分支(推荐)
这是最稳妥的解决方案:
- 若要保留Spring 5.x生态,升级到Spring Framework 5.3.20及以上版本(5.3.x是长期支持分支,最高支持Java18),对应的Spring Boot版本为2.7.x(Spring Boot 2.7.x默认依赖Spring 5.3.x,且支持Java17)。
- 若想适配Java17+新特性,可直接升级到Spring Framework 6.x(要求Java17+),对应的Spring Boot版本为3.x。
方案二:单独升级ASM依赖(临时过渡,不推荐)
如果暂时无法升级Spring,可尝试将ASM版本升级到9.3及以上(支持Java17),在pom.xml中强制指定ASM版本:
<dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.5</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-commons</artifactId> <version>9.5</version> </dependency>
⚠️ 注意:这种方式可能引发Spring与ASM版本的兼容性问题,仅作为临时过渡方案。
方案三:确认编译与运行环境一致性
- 检查Maven编译配置:确保
maven-compiler-plugin的release参数正确设置为17,且所有模块统一使用该配置,避免部分模块编译为旧版本class文件。 - 验证WildFly运行环境:确认WildFly启动时使用的是Java17 JDK,检查启动脚本中的
JAVA_HOME是否指向正确的Java17安装目录。
内容的提问来源于stack exchange,提问作者user1169587
相关产品推荐
相关产品推荐

