我有一个 Spring Boot 项目,它是用 Java 21 和 Gradle 8.4 编写的。我安装了 Java 21 JDK。当我在 IntelliJ IDEA 中运行它时,它抛出一个错误:
2024-04-26 02:16:43.098 ERROR 904 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\Users\tigra\Desktop\Java\blog\build\classes\java\main\ru\pet\blog\Blog.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [C:\Users\tigra\Desktop\Java\blog\build\classes\java\main\ru\pet\blog\Blog.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 65
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:457) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:316) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:128) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:295) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:206) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:174) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.25.jar:5.3.25]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.7.8.jar:2.7.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.7.8.jar:2.7.8]
at ru.pet.blog.Blog.main(Blog.java:10) ~[main/:na]
Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [C:\Users\tigra\Desktop\Java\blog\build\classes\java\main\ru\pet\blog\Blog.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 65
at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:60) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:48) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:429) ~[spring-context-5.3.25.jar:5.3.25]
... 19 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65
at org.springframework.asm.ClassReader.<init>(ClassReader.java:199) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.asm.ClassReader.<init>(ClassReader.java:180) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.asm.ClassReader.<init>(ClassReader.java:166) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.asm.ClassReader.<init>(ClassReader.java:287) ~[spring-core-5.3.25.jar:5.3.25]
at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:57) ~[spring-core-5.3.25.jar:5.3.25]
... 23 common frames omitted
Process finished with exit code 1
到处都建议更新 jdk 或 Gradle 版本,但我已经这样做了:(
这是我的build.gradle:
plugins {
id 'org.springframework.boot' version '3.2.5'
id "io.spring.dependency-management" version "1.1.4"
id 'java'
}
version = '1.0.2'
group = 'org.gradle.samples'
java {
sourceCompatibility = JavaVersion.VERSION_21
}
repositories {
mavenCentral()
}
dependencies {
implementation platform('org.springframework.boot:spring-boot-dependencies:3.2.5')
implementation ('org.casbin:jcasbin:1.55.0') {
exclude module: "logback-classic"
}
implementation ('org.casbin:redis-adapter:1.0.0') {
exclude module: "logback-classic"
}
implementation 'org.springframework.boot:spring-boot-starter:3.2.5'
implementation 'io.github.lognet:grpc-spring-boot-starter:5.1.5'
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'org.flywaydb:flyway-core'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.postgresql:postgresql'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter:4.1.2'
implementation 'org.grpcmock:grpcmock-spring-boot:0.11.0'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.postgresql:postgresql'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
//dependencyManagement {
// imports {
// mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
// }
//}
tasks.named('test', Test) {
useJUnitPlatform()
}
我还尝试将项目迁移到 Java 17 或使用它 - https://stackoverflow.com/a/64863465/287647 没有帮助:(
这是怎么回事?我该如何解决?
看来这是Java编译错误。尝试使用当前的 Java 版本重新编译该类,或者降级到用于编译第一个实例中的代码的 java 版本。