如何在IntelliJ IDEA中修复Unsupported class file major version 65错误
问题
我有一个基于Java 21、Gradle 8.4构建的Spring Boot项目,已安装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,以及参考相关方案,均未解决问题。请问问题原因是什么?该如何修复?
原因分析
从错误日志能明确看到核心问题:
- 依赖版本不一致:你配置的是Spring Boot 3.2.5,但项目运行时实际加载的是Spring Boot 2.7.8和Spring Framework 5.3.25。Spring Framework 5.x最高仅支持Java 17,无法识别Java 21的类文件版本(major version 65),因此抛出
Unsupported class file major version 65错误。 - Spring Cloud版本不兼容:你使用的Spring Cloud 4.1.2属于2022.0.x系列,仅支持Spring Boot 3.0/3.1,与Spring Boot 3.2.5不匹配,会导致依赖冲突。
出现版本不一致的原因,大概率是IntelliJ IDEA缓存未清理,或者运行配置没有正确使用Gradle构建的最新输出,导致旧版本依赖残留。
修复方案
1. 彻底清理缓存并重新构建
- 在IntelliJ IDEA中执行:
File → Invalidate Caches... → 勾选"Clear file system cache and local history" → 点击Invalidate and Restart - 手动删除项目根目录下的
build文件夹和.gradle文件夹 - 重启IDEA后,执行Gradle的
clean和build任务:在右侧Gradle面板找到Tasks → build → clean,执行后再运行build
2. 修正IDEA运行配置
- 打开Run/Debug Configurations(右上角运行按钮下拉菜单 → Edit Configurations...)
- 找到你的Spring Boot应用配置,检查以下项:
- JRE:选择Java 21(确保IDEA已正确识别本地Java 21 JDK)
- Use classpath of module:选择当前项目的主模块(需对应Gradle构建后的模块)
- 开启"Delegate IDE build/run actions to Gradle",让IDEA完全依赖Gradle的构建结果
3. 修复Spring Cloud与Spring Boot的版本兼容
修改build.gradle,配置兼容Spring Boot 3.2.5的Spring Cloud版本:
ext { springCloudVersion = "2023.0.2" } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } }
同时删除dependencies中的implementation 'org.springframework.cloud:spring-cloud-starter:4.1.2',Spring Cloud BOM会自动管理starter的版本,避免手动指定带来的冲突。
4. 验证依赖一致性
执行Gradle的dependencies任务,查看runtimeClasspath下的Spring相关依赖,确保所有Spring核心模块(spring-core、spring-context等)都是3.2.5版本,没有Spring 5.x的依赖混入。如果发现冲突,在对应的依赖中添加排除规则。
内容的提问来源于stack exchange,提问作者Tigran
相关产品推荐
相关产品推荐

