springboot1.5.x升级2.2.x问题,java.lang.NoClassDefFoundError: org/springframework/util/unit/DataSize

问题:

项目所用的springboot版本从1.5.x升级到2.2.x,
项目启动报java.lang.NoClassDefFoundError: org/springframework/util/unit/DataSize

原因:

spring版本和springboot及springcloud的适用版本对不上

网上一般解决方式:

找到自己定义过的spring版本,修改为5.2.x即可

PS: 想知道springboot及springcloud版本对应关系在这里:
https://spring.io/projects/spring-cloud
在这里插入图片描述

springboot和spring的依赖关系在这里:
https://spring.io/projects/spring-boot#learn

在这里插入图片描述

点开后点击
Dependency Versions,在里面就可以找到与spring(还有其他所有的依赖)对应的依赖关系了

在这里插入图片描述

拓展难题:

我们在idae的External libraries下搜索版本号,比如4.3.x,能看到该版本的spring被项目使用中,但在现有所有的包括子服务的pom中,根本找不到该版本spring的定义,此时4.3.x版本的spring-context包中是没有这个org.springframework.util.unit.DataSize类的,这种问题令人头疼

问题原因:
某个已引入的jar包引入了这个版本的spring依赖,导致在项目中使用了该版本

思考:
既然一时半会也找不到该依赖的引入,也无法间接更改版本,那就直接控制其版本

我的解决方式:

利用<dependencyManagement>标签,此标签可以让我们做所有jar包的版本强制控制,比如我此处使用5.2.5.RELEASE版本
我项目的主pom文件部分properties:

<properties>
<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
<spring.version>5.2.5.RELEASE</spring.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
</properties>

定义<dependencyManagement>锁定版本

<dependencyManagement>
   <dependencies>
      <!-- 锁定spring版本 -->
           <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-aop</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-beans</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-expression</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-messaging</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-tx</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-oxm</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-test</artifactId>
         <version>${spring.version}</version>
           </dependency>

      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context-support</artifactId>
         <version>${spring.version}</version>
           </dependency>
      <!-- 锁定spring版本 -->

   </dependencies>
</dependencyManagement>



补充:

有一个更好用的插件,快速定位依赖与冲突,大家也可以用起来:mavenhelper

引用:

用法:
https://www.cnblogs.com/jajian/p/11002521.html
下载地址:
https://plugins.jetbrains.com/plugin/7179-maven-helper



希望碰到类似问题的伙伴,在此做一个参考~~~有问题可留言

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值