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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:26:10