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

Spring组件扫描报错:Unsupported class file major version 64 求助

问题分析与解决:Spring组件扫描报错Unsupported class file major version 64

问题场景

在IntelliJ IDE环境下使用Java 20搭配spring-context 5.3.14版本,通过XML配置<context:component-scan>扫描标注@Component的组件时,抛出如下错误:

BeanDefinitionStoreException: Failed to read candidate component class : nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 64

直接在XML中定义Bean可正常运行,但使用@Component注解触发组件扫描时就会报错,且升级或降级spring-context版本问题依然存在。

相关代码

组件类代码

package com.javaLearn;

import org.springframework.stereotype.Component;

@Component
public class Doctor implements Staff {
    public void assist() {
        System.out.println("Doctor is assisting");
    }
}

XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--    扫描该包下所有组件   -->
    <context:component-scan base-package="com.javaLearn"> </context:component-scan>
</beans>

完整错误栈

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [E:\JavaLearn\SpringFrameworkDemo\target\classes\com\javaLearn\Doctor.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 [E:\JavaLearn\SpringFrameworkDemo\target\classes\com\javaLearn\Doctor.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 64
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:454)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:316)
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276)
    at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:90)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1391)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1371)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:179)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:149)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:96)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:514)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:394)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:337)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:305)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:257)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:128)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:133)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:637)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:522)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    at com.javaLearn.Main.main(Main.java:15)
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 [E:\JavaLearn\SpringFrameworkDemo\target\classes\com\javaLearn\Doctor.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 64
    at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:61)
    at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:50)
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
    at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:430)
    ... 25 more
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 64
    at org.springframework.asm.ClassReader.<init>(ClassReader.java:195)
    at org.springframework.asm.ClassReader.<init>(ClassReader.java:176)
    at org.springframework.asm.ClassReader.<init>(ClassReader.java:162)
    at org.springframework.asm.ClassReader.<init>(ClassReader.java:283)
    at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:58)
    ... 29 more

原因与解决方法

核心原因

Spring的组件扫描功能依赖ASM库解析类文件的元数据(比如@Component注解),而spring-context 5.3.14内置的ASM版本不支持Java 20的类文件版本(major version 64)。直接在XML定义Bean不需要解析类注解,因此不会触发ASM的类解析操作,所以可以正常运行。

解决方法

  1. 升级Spring Framework版本
    Spring 5.3.x系列最高仅支持到Java 17,要兼容Java 20需要升级到Spring Framework 6.0及以上版本(6.0版本开始支持Java 17至20)。

  2. 降低项目编译版本
    如果不想升级Spring,可将项目的Java编译版本降到Spring 5.3.x支持的最高版本(Java 17):

    • 在IntelliJ中打开File → Project Structure → Project,将Project SDK和Language Level设置为17;
    • 进入Build, Execution, Deployment → Compiler → Java Compiler,将Target bytecode version改为17。
  3. 排查依赖冲突
    检查项目依赖树,确保没有引入独立的旧版ASM依赖,避免其覆盖Spring自带的ASM版本。可通过构建工具(Maven/Gradle)的依赖分析功能排查冲突。

内容的提问来源于stack exchange,提问作者Shashank Deepak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:44:53