如何修复 IntelliJ IDEA 中的“不支持的类文件主要版本 65”?

问题描述 投票:0回答:1

我有一个 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 spring spring-boot gradle build.gradle
1个回答
0
投票

看来这是Java编译错误。尝试使用当前的 Java 版本重新编译该类,或者降级到用于编译第一个实例中的代码的 java 版本。

© www.soinside.com 2019 - 2024. All rights reserved.