Java Spring应用启动失败(NoClassDefFoundError),求解决方法
Spring Boot启动报错:
NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup 我在尝试运行Spring应用时遇到问题,尽管已在pom.xml中添加如下依赖:
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.3.RELEASE</version> </dependency>
我的启动类EcommerceApplication.java代码如下:
EcommerceApplication.java
package com.ecommerce.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class EcommerceApplication { public static void main(String[] args) { SpringApplication.run(EcommerceApplication.class, args); } }
启动时抛出如下错误:
错误信息
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:247) at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:262) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) at com.ecommerce.demo.EcommerceApplication.main(EcommerceApplication.java:9) Caused by: java.lang.ClassNotFoundException: org.springframework.core.metrics.ApplicationStartup at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 5 more
我已通过网络搜索尝试解决,但问题仍未修复,请问该如何调整才能让应用顺利运行?
解决方案
这个错误的核心原因是:Spring Boot 2.3.x依赖的Spring Framework版本(5.2.x)中不存在ApplicationStartup类,该类是Spring Framework 5.3及以上版本才新增的API。出现这种情况大概率是项目存在依赖冲突——比如其他依赖间接引入了高版本的Spring Core,或者你手动混用了不同版本的Spring Boot组件。
方案1:使用Spring Boot父依赖统一版本管理
这是最稳妥的方式,通过引入Spring Boot的父依赖,让它自动管控所有Spring生态组件的版本,彻底避免版本冲突:
<project ...> <!-- 添加Spring Boot父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> <relativePath/> <!-- 从Maven仓库自动查找父依赖 --> </parent> <dependencies> <!-- 无需再指定版本,父依赖会自动匹配兼容版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
方案2:排查并排除冲突依赖
如果无法使用父依赖,先通过Maven命令查看完整依赖树,定位引入高版本Spring Core的依赖:
mvn dependency:tree
找到冲突的依赖后,通过<exclusions>标签排除其中的Spring Core依赖:
<dependency> <groupId>冲突依赖的groupId</groupId> <artifactId>冲突依赖的artifactId</artifactId> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency>
方案3:升级Spring Boot版本
如果项目允许升级,可以将Spring Boot版本提升到2.4.x及以上(这些版本依赖的Spring Framework 5.3+包含ApplicationStartup类):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.4.13.RELEASE</version> <!-- 选择稳定的高版本 --> </dependency>
内容的提问来源于stack exchange,提问作者MTR807
相关产品推荐
相关产品推荐

