Java项目从JDK12升级到21(Gradle8.4)遇版本65不支持错误
问题:JDK21升级后Gradle构建报
Unsupported class file major version 65 将Java项目从JDK12升级到JDK21(使用Gradle 8.4/8.5),执行命令:
gradlew build --scan
时出现错误:
Unsupported class file major version 65
已完成的配置检查:
- 已安装JDK21并配置
JAVA_HOME,java -version输出:java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing) - gradle-wrapper.properties使用Gradle8.4(也尝试过8.5):
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists org.gradle.jvmargs=-Xmx1536M --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED - IntelliJ 2023.3配置:Gradle JVM为
JAVA_HOME指向的JDK21,构建运行使用Gradle,项目SDK、语言级别、字节码版本均设置为21 gradlew -version显示Gradle8.4运行在JDK21环境下
堆栈跟踪关键片段:
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65 at org.springframework.asm.ClassReader.<init>(ClassReader.java:199) at org.springframework.asm.ClassReader.<init>(ClassReader.java:180) at org.springframework.asm.ClassReader.<init>(ClassReader.java:166) at org.springframework.asm.ClassReader.<init>(ClassReader.java:287) at org.springframework.boot.loader.tools.MainClassFinder.createClassDescriptor(MainClassFinder.java:254) at org.springframework.boot.loader.tools.MainClassFinder.doWithMainClasses(MainClassFinder.java:136) at org.springframework.boot.loader.tools.MainClassFinder.findSingleMainClass(MainClassFinder.java:109) at org.springframework.boot.gradle.plugin.ResolveMainClassName.findMainClass(ResolveMainClassName.java:144)
已升级Spring Boot版本从2.0.6.RELEASE到2.7.0,项目插件配置:
plugins { id "org.flywaydb.flyway" version "5.2.1" id "com.github.spotbugs" version "4.5.0" id 'pmd' } apply plugin: "java" apply plugin: "idea" apply plugin: "org.springframework.boot" apply plugin: "io.spring.dependency-management" apply plugin: "no.nils.wsdl2java" apply plugin: "eclipse" dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.postgresql:postgresql:${postgresqlVersion}") classpath("no.nils:wsdl2java:${wsdl2javaVersion}") }
错误原因
Major Version 65对应JDK21的字节码版本,报错根源是Spring Boot 2.7.0依赖的ASM版本不支持JDK21。
Spring Boot 2.7.x默认依赖的ASM版本为9.3,该版本仅支持到JDK19(Major Version 63),直到ASM 9.5才开始支持JDK21的字节码版本。从堆栈信息可以看到,报错发生在Spring Boot的MainClassFinder调用ASM的ClassReader时,ASM无法识别JDK21编译生成的类文件。
解决方案
1. 升级Spring Boot到兼容JDK21的版本
Spring Boot 2.7.x最高仅支持到JDK17,要完全兼容JDK21需升级到Spring Boot 3.0及以上版本(3.0+最低支持JDK17,原生兼容JDK21)。
修改项目中的Spring Boot版本配置:
springBootVersion = "3.2.0" // 或其他3.x系列稳定版
注意:Spring Boot 3.x基于Spring Framework 6.x,存在API变更(如javax包替换为jakarta),需同步调整项目中的依赖和代码。
2. 若无法升级Spring Boot,单独升级ASM版本
如果暂时无法升级到Spring Boot 3.x,可通过Spring依赖管理强制升级ASM到支持JDK21的版本(如9.5及以上):
dependencyManagement { dependencies { dependency 'org.ow2.asm:asm:9.5' dependency 'org.ow2.asm:asm-commons:9.5' dependency 'org.ow2.asm:asm-tree:9.5' dependency 'org.ow2.asm:asm-analysis:9.5' dependency 'org.ow2.asm:asm-util:9.5' } }
3. 同步升级其他老旧插件
- Flyway 5.2.1版本过旧,不支持JDK21,建议升级到Flyway 9.x及以上版本
- SpotBugs 4.5.0对JDK21支持有限,可升级到SpotBugs 4.8.0+或更高版本
- 检查
wsdl2java插件版本,确保其支持JDK21
内容的提问来源于stack exchange,提问作者user23088893
相关产品推荐
相关产品推荐

