Spring Boot 3.2.4测试阶段报Unsupported class file major version 65问题
问题原因及解决方案
核心原因
- 测试工具版本不兼容Java21:
Unsupported class file major version 65错误说明你使用的字节码处理工具(如JaCoCo、Mockito、PowerMock等)版本过旧,无法识别Java21生成的类文件(版本号65对应Java21)。 - 字节码增强工具操作JDK内部类受限:Java21对模块访问权限管控更严格,旧版本的字节码增强工具(如JaCoCo)尝试修改
sun包下的JDK内部类时,会触发IO异常。
具体解决步骤
升级测试依赖工具版本
- JaCoCo:必须升级到0.8.10及以上版本(0.8.10开始支持Java21),在Gradle插件中指定版本:
plugins { id 'jacoco' version '0.8.11' } - Mockito:升级到5.6.0及以上版本,避免使用不兼容Java21的旧版本。如果之前用PowerMock,建议替换为Mockito原生的静态方法Mock功能(Mockito 3.4+已支持),因为PowerMock对Java21的支持仍不完善。
- 确保Spring Boot Starter Test版本与Spring Boot 3.2.4匹配,避免手动指定低版本的测试依赖。
- JaCoCo:必须升级到0.8.10及以上版本(0.8.10开始支持Java21),在Gradle插件中指定版本:
排除JDK内部类的字节码增强
修改JaCoCo配置,排除sun包下的类,避免工具尝试instrument这些受保护的JDK内部类:// 排除测试覆盖率验证中的JDK内部类 jacocoTestCoverageVerification { excludes = [ 'sun/**', 'com/sun/**' ] } // 排除测试报告中的JDK内部类 jacocoTestReport { excludes = [ 'sun/**', 'com/sun/**' ] } // 测试任务中排除JDK内部类的字节码增强 test { jacoco { excludes = [ 'sun/**', 'com/sun/**' ] } }确认Gradle工具链生效
运行./gradlew --version检查Gradle使用的Java版本是否为21。如果工具链未生效,在gradle.properties中指定Java21路径:org.gradle.java.home=/你的Java21安装路径
内容的提问来源于stack exchange,提问作者StefanoSKAL
相关产品推荐
相关产品推荐

