Spring Boot 将Java项目从版本12升级到21(使用Gradle 8.4),并获得不支持的类文件主要版本65

mv1qrgav  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(148)

运行:

gradlew build --scan

字符串
给出:

Unsupported class file major version 65


我读过类似的问题(版本< 65)和解决方案。这是怎么回事?!
我安装了JDK 21并设置了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使用8.4:

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


我也试过Gradle 8.5 -同样的错误。
兼容https://docs.gradle.org/current/userguide/compatibility.html
在IntelliJ 2023.3中:

File, Settings
Build, Execution, Deployment
Build Tools, Gradle
Gradle JVM: JAVA_HOME Oracle Open JDK version 21.0.1
Build and run using: Gradle
Run tests using: Gradle
Gradle distribution: Wrapper


gradlew版本

------------------------------------------------------------
Gradle 8.4
------------------------------------------------------------

Build time:   2023-10-04 20:52:13 UTC
Revision:     e9251e572c9bd1d01e503a0dfdf43aedaeecdc3f

Kotlin:       1.9.10
Groovy:       3.0.17
Ant:          Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM:          21.0.1 (Oracle Corporation 21.0.1+12-LTS-29)
OS:           Windows 11 10.0 amd64
Compiler, Java Compiler
Use compiler: Javac
Project bytecode version: 21

File, Project Structure 
Project Settings, Project
SDK: 21 Oracle Open JDK version 21.0.1
Language level: 21
Modules Main and Test use Module SDK: 21 Oracle Open JDK version 21.0.1

Platform Settings, SDKs
21, JDK Home Path: C:\Program Files\Java\jdk-21

的字符串
使用Gradle 8.5也会出现同样的错误。
为什么我得到:

Unsupported class file major version 65


Stacktrace代码片段(所以不允许我嵌入图像,我不能提供链接:

at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
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)
    at org.springframework.boot.gradle.plugin.ResolveMainClassName.resolveMainClassName(ResolveMainClassName.java:139)
    at org.springframework.boot.gradle.plugin.ResolveMainClassName.resolveAndStoreMainClassName(ResolveMainClassName.java:128)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)


我把springBootVersion从“2.0.6.RELEASE”升级到了“2.7.0”。
JDK升级之前:

springBootVersion = "2.0.6.RELEASE"


现在:

springBootVersion = "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}")
    }

798qvoo8

798qvoo81#

为了完成@BasilBourque在问题评论中提供的信息。
您必须根据Compatibility Matrix切换到Gradle 8.5版本,因为Gradle 8.4支持使用Java工具链使用Java 21进行编译和测试,但尚不支持在Java 21上运行Gradle本身。
有关它的更多详细信息,请查看Gradle 8.5的发行说明。

相关问题