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

如何在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,以及参考相关方案,均未解决问题。请问问题原因是什么?该如何修复?

原因分析

从错误日志能明确看到核心问题:

  1. 依赖版本不一致:你配置的是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错误。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:29:55