异常解决:java.lang.NoClassDefFoundError: org/springframework/boot/Bootstrapper

本文记录了解决SpringBoot项目引入SpringCloud依赖后出现的java.lang.NoClassDefFoundError异常的过程,通过调整版本管理成功解决了问题。

异常解决:java.lang.NoClassDefFoundError: org/springframework/boot/Bootstrapper
跟着以前的教学视频学习的过程中出现了这个问题,找了好久终于找出了原因,特此记录。

问题描述

问题发生在springboot去添加spring-cloud的maven依赖包后,启动springboot程序,idea突然报了以下错误:

java.lang.NoClassDefFoundError: org/springframework/boot/Bootstrapper
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.springframework.cloud.bootstrap.encrypt.DecryptEnvironmentPostProcessor.getTextEncryptor(DecryptEnvironmentPostProcessor.java:83)
	at org.springframework.cloud.bootstrap.encrypt.DecryptEnvironmentPostProcessor.postProcessEnvironment(DecryptEnvironmentPostProcessor.java:69)
	at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:177)
	at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:76)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:342)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)
	at com.atguigu.gulimail.product.GuliMailProductApplication.main(GuliMailProductApplication.java:11)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.Bootstrapper
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 27 common frames omitted

原因

本人是使用idea的spring Initializr初始化器去创建的项目,随后将springboot的版本改为了较旧的 springboot 2.1.8 版本,启动后报错

反复寻找之后原来是因为使用spring Initializr创建的时候,一旦你勾中了springCloud有关技术,他会同时引入springCloud依赖版本管理:

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.0</spring-cloud.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

解决

自定义springCloud依赖版本即可

总结

当你使用idea初始化器去创建spring项目,然后你又需要改变当前版本的时候,最好注意maven依赖之间的版本冲突

Java 开发中,出现“无法访问 org.springframework.boot.SpringApplication,类文件版本为 61.0 而应为 52.0”的错误,通常是由于 Java 版本不兼容导致的。类文件版本 61.0 对应的是 Java 17,而 52.0 对应的是 Java 8。以下是几种可能的解决方法: ### 更换 Spring Boot 版本 可以尝试将 Spring Boot 更换为低版本,因为高版本的 Spring Boot 默认使用较高版本的 JDK。例如,将 Spring Boot 版本更换为 2.7.6,在 `pom.xml` 文件中进行如下配置: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.6</version> </parent> ``` 这种方法已经被证实可以解决部分此类问题,有开发者将版本从 3.0.0 换成 2.7.6 后,问题得到解决,且尝试其他低版本也均成功 [^4]。 ### 删除错误类文件并确保类路径正确 根据错误提示,删除错误的类文件,并确保类文件位于正确的类路径子目录中。错误提示通常会给出错误类文件的具体路径,例如 `/D:/.m2/repository/org/springframework/boot/spring-boot/3.3.13/spring-boot-3.3.13.jar!/org/springframework/boot/SpringApplication.class` 或 `/D:/Idea_workplace/apache-maven-3.8.2/repository/org/springframework/boot/spring-boot/3.3.2/spring-boot-3.3.2.jar!/org/springframework/boot/SpringApplication.class`。删除这些文件后,重新构建项目,让 Maven 重新下载正确的依赖 [^1][^2]。 ### 升级 JDK 版本 由于类文件版本 61.0 对应的是 Java 17,若项目依赖的 Spring Boot 版本需要 Java 17 及以上版本,可将 JDK 升级到 Java 17 或更高版本。升级后,需要确保 IDE 和项目配置中使用的是新的 JDK 版本。 ### 检查 IDE 和项目配置 确保 IDE(如 IntelliJ IDEA 或 Eclipse)和项目的 Java 版本配置一致,都使用 Java 8 或与 Spring Boot 版本兼容的 Java 版本。在 IntelliJ IDEA 中,可以通过 `File -> Project Structure` 来检查和修改项目的 Java 版本配置。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值