Spring Boot 2.7.4(Java17)启动失败:ClassUtils.isLambdaClass方法缺失求助
Spring Boot 2.7.4 启动失败解决方法
问题根源
项目基于Spring Boot 2.7.4、Java 17开发,依赖poi-ooxml 5.3.2(间接引入commons-io 2.11.0)及spring-aop。启动失败的核心原因是:
- commons-io 2.11.0的jar包中意外混入了Spring框架的
org.springframework.util.ClassUtils和org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator类 - 类加载器优先从commons-io的jar中加载了
ClassUtils,但该类缺少Spring AOP 5.3.29所需的isLambdaClass(java.lang.Class)方法,导致调用失败
报错关键信息
- 调用失败位置:
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:448) - 缺失方法:
boolean org.springframework.util.ClassUtils.isLambdaClass(java.lang.Class) - 冲突点:Spring AOP类从
spring-aop-5.3.29.jar加载,但依赖的ClassUtils却从commons-io-2.11.0.jar加载,二者版本不兼容
解决方法
1. 清理本地Maven仓库的异常commons-io包
正版commons-io是纯工具类库,不会包含Spring类,大概率是本地仓库的包已损坏或被错误打包:
- 找到本地Maven仓库路径下的
commons-io/commons-io/2.11.0目录,删除整个文件夹 - 执行命令
mvn clean install,让Maven重新下载正版的commons-io 2.11.0包
2. 手动管控commons-io依赖
如果重新下载后问题仍存在,在pom.xml中排除poi-ooxml引入的commons-io,再手动引入纯净版本:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.3.2</version> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency>
3. 强制指定Spring核心依赖优先级
确保Spring Core和Spring AOP的jar在类路径中优先加载,在pom.xml中明确声明:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.3.29</version> </dependency>
内容的提问来源于stack exchange,提问作者Karkala Srikanth
相关产品推荐
相关产品推荐

