Spring应用启动报NoSuchMethodError: LogDelegateFactory.getHiddenLog问题求助
问题根因
你遇到的java.lang.NoSuchMethodError异常是Spring依赖版本不兼容导致的:
你的pom.xml中存在两种不同版本的Spring核心依赖:
- spring-core、spring-beans、spring-context、spring-orm 版本为
5.2.2.RELEASE - spring-web、spring-webmvc 版本为
5.3.9
LogDelegateFactory.getHiddenLog方法是Spring 5.3.x版本才新增的API,高版本的spring-webmvc调用这个方法时,低版本的spring-core中不存在该方法,就会抛出方法不存在的错误。
解决方法
统一所有Spring依赖的版本即可,推荐两种方案二选一:
方案1:降级web相关依赖
将spring-web、spring-webmvc的版本改为和其他Spring模块一致的5.2.2.RELEASE,修改后对应依赖如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.2.RELEASE</version> </dependency>
方案2:升级所有Spring依赖到高版本
把所有Spring核心模块都升级到5.3.9,稳定性和功能更完善,推荐使用该方案。
优化建议
可以在pom.xml的properties节点中统一配置Spring版本,避免后续修改版本时出现遗漏:
<properties> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> <!-- 统一管理Spring版本 --> <spring.version>5.3.9</spring.version> </properties>
所有Spring依赖的version都替换为${spring.version}即可:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- 其他Spring依赖同理配置即可 -->
内容的提问来源于stack exchange,提问作者Lusia
相关产品推荐
相关产品推荐

