如何忽略依赖中的Spring Boot自动配置?解决ASM版本兼容错误
解决Java 8 Spring Boot项目中依赖自动配置的Java版本不兼容问题
问题背景
基于Groovy、Java 8和Spring Boot开发的测试框架,升级某依赖后运行测试出现以下报错:
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: class path resource at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationMetadata(AutoConfigurationSorter.java:229) ... 86 more Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 61 at org.springframework.asm.ClassReader.<init>(ClassReader.java:196) at org.springframework.asm.ClassReader.<init>(ClassReader.java:177) at org.springframework.asm.ClassReader.<init>(ClassReader.java:163) at org.springframework.asm.ClassReader.<init>(ClassReader.java:284) at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:57) ... 92 more
排查后确认,问题源于该依赖spring.factories中的自动配置项org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.app.api.config.testAutoConfig——该依赖基于Java 17构建(major version 61对应Java 17),而项目用Java 8编译,导致Spring的ASM无法解析高版本类文件。
解决方法
方法1:通过注解排除指定自动配置类
在项目启动类或测试类的Spring注解中,直接添加exclude参数排除目标自动配置类:
启动类示例:
@SpringBootApplication(exclude = {testAutoConfig.class}) public class TestFrameworkApplication { public static void main(String[] args) { SpringApplication.run(TestFrameworkApplication.class, args); } }
测试类示例:
@SpringBootTest(exclude = {testAutoConfig.class}) public class YourTestClass { // 测试逻辑 }
方法2:通过配置文件全局排除
若不想修改代码,可在项目的配置文件中添加排除规则:
application.properties格式:
spring.autoconfigure.exclude=com.app.api.config.testAutoConfig
application.yml格式:
spring: autoconfigure: exclude: com.app.api.config.testAutoConfig
需排除多个类时,用逗号分隔即可。
方法3:修改依赖的spring.factories(不推荐)
若有权限修改依赖源码,可删除该依赖META-INF/spring.factories中对应的自动配置条目,但此方法需要重新打包依赖,通用性差,仅作为备选方案。
注意事项
- 排除自动配置后,需确认项目无需该类提供的功能,或手动实现对应的配置逻辑,避免功能缺失。
- 若后续项目升级至Java 17及以上版本,可移除排除配置,恢复自动配置的使用。
内容的提问来源于stack exchange,提问作者Sajit Gangadharan
相关产品推荐
相关产品推荐

