升级Spring Boot 2.5至2.6时遇java.lang.NoClassDefFoundError问题求助
问题:Spring Boot 2.5升级到2.6后启动失败,抛出NoClassDefFoundError: org/springframework/boot/Bootstrapper
问题背景
将Spring Boot从2.5版本升级到2.6版本后,应用启动失败,出现NoClassDefFoundError,提示找不到org.springframework.boot.Bootstrapper类。
项目指定版本的依赖
项目中部分手动指定版本的依赖如下(其余依赖继承自父项目):
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.31</version> </dependency>
<dependencies> <dependency> <groupId>io.awspring.cloud</groupId> <artifactId>spring-cloud-aws-dependencies</artifactId> <version>2.3.0</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.89</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.16.67</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies>
错误日志
20:27:56.606 [main] ERROR org.springframework.boot.SpringApplication - Application run failed java.lang.NoClassDefFoundError: org/springframework/boot/Bootstrapper at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
解决方案
核心原因
该错误源于Spring Boot与Spring Cloud AWS版本不兼容:Spring Cloud AWS 2.3.0是适配Spring Boot 2.4/2.5的版本,无法兼容Spring Boot 2.6;同时手动指定的依赖版本也可能与Boot内置依赖冲突。
具体修复步骤
升级Spring Cloud AWS依赖版本
Spring Boot 2.6对应的Spring Cloud AWS版本为3.x系列,修改spring-cloud-aws-dependencies的导入版本:<dependency> <groupId>io.awspring.cloud</groupId> <artifactId>spring-cloud-aws-dependencies</artifactId> <version>3.0.0</version> <!-- 适配Spring Boot 2.6的最低版本,可按需升级到更高兼容版本 --> <type>pom</type> <scope>import</scope> </dependency>同步升级AWS SDK版本
Spring Cloud AWS 3.x适配AWS SDK 2.x的新版本,建议将software.amazon.awssdk的BOM版本升级到兼容的2.17.x系列,例如:<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.17.100</version> <type>pom</type> <scope>import</scope> </dependency>移除手动指定的snakeyaml版本
Spring Boot 2.6已经内置了适配的snakeyaml版本,手动指定1.31会导致版本冲突,直接删除该依赖的版本声明即可:<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <!-- 移除version标签,由Spring Boot父项目管理版本 --> </dependency>清理并更新依赖
执行Maven命令强制清理并更新依赖,确保所有依赖版本一致:mvn clean install -U
内容的提问来源于stack exchange,提问作者Sarfraz z
相关产品推荐
相关产品推荐

