Spring boot java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver报错

昨天遇到了一个很奇怪的错误,在我使用Spring Boot创建一个新项目时,一直报错,显示“java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver”。好在,我找到了解决方法,现在就和大家分享一下。

一、问题描述

在使用Spring Boot创建项目时,在程序启动时,我遇到了以下的报错信息:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-09-09 17:28:57.357 ERROR 8026 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver
	at org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration$$EnhancerBySpringCGLIB$$9b8765b6.<init>(<generated>)
	at org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration$$FastClassBySpringCGLIB$$7d5fb908.newInstance(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
......

二、分析过程

这个报错信息非常奇怪,因为这个错误信息实在启动阶段就出现的。我尝试了很多方法,例如在pom.xml文件中添加依赖,但是均无效。在这里将我的解决方法分享给大家。

首先确定了错误信息:java.lang.NoClassDefFoundError,这意味着我的类路径出现了问题。

然后查看了异常信息中间的内容:“org/springframework/boot/bind/RelaxedPropertyResolver”,发现这个问题和Spring框架配置文件有关,考虑到Spring Boot 的自动配置的原理,这里有一个可能是自动配置过程中某一个 jar 包的版本不兼容的问题。在保证项目其他环境没问题的情况下,我猜想可能是Spring Boot的版本太新,或者是其他jar包的版本与Spring Boot不兼容。

三、解决方法

解决这个问题的方法就比较简单了,只需要把Spring Boot的版本号稍微降低一点即可,也可以在pom.xml文件中删除掉Spring Boot和其他 jar 包的版本号(忽略版本)。

修改后的pom.xml文件如下:

扫描二维码关注公众号,回复: 16768756 查看本文章
<dependencies>
    <!-- Spring Boot starters -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Data MongoDB -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

    <!-- Spring Boot Actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!-- Test -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- MongoDb Driver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.6.0</version>
    </dependency>
</dependencies>

我将Spring Boot的版本改成了2.1.3.RELEASE,效果良好,程序在运行时不再报错。

在Gradle中,解决方法如下:

configurations.all {
    resolutionStrategy {
        force 'commons-io:commons-io:2.0.1'
    }
}

四、小结

通过上述分析和解决后,我们可以总结出一些解决方法:

  1. 确认错误信息,有可能是类路径出现问题;
  2. 查看异常信息中间的内容,判断是否是Spring框架的配置文件的问题;
  3. 降低Spring Boot版本号,或者让Gradle强制选择一些jar包的版本;
  4. 持续学习和使用新的技术,避免出错。

短时间内,我想不出还有什么需要补充的了,因为我已经详细阐述了问题产生的原因、解决方法和实现步骤。希望这篇技术分享对程序员们在实际的工作中有所帮助。

不管我们是在什么地方遇到了问题,我们都不要放弃并逐一分析问题,找到解决问题的方法,积极探究原因并投入到解决方案中去。

希望本篇文章能给正在遇到该问题的读者们提供指导和帮助,如果文章能得到大家的认可和支持,欢迎分享给更多的人。谢谢大家!

猜你喜欢

转载自blog.csdn.net/javamendou/article/details/131372327
今日推荐