个人使用: 18版本替换问题处理以及方案

需求 : 目前修改中的项目中涉及mybatis,需要升级对应mybatis版本至3.5.9

起因是[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V50tlXw9-1642489146112)(C:\Users\qijian\AppData\Roaming\Typora\typora-user-images\image-20220106190419375.png)]

对应log4j2的史诗级bug造成系列头部的开源项目均受到一定影响,进行版本紧急升级。

因为项目中大部分是用的jpa,但是不排除部分项目混搭了mybatis架包。

首先直接进行jar包查询,是否存在mybatis 架包?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDaYNbfC-1642489146114)(C:\Users\qijian\AppData\Roaming\Typora\typora-user-images\image-20220118145312660.png)]

这里是替换之后,那么替换之前的 对应版本号是 3.4.6.

对应如何替换?

替换思想是 mybatis:3.5.9 (小于3.5.6则更新)

1、 如果存在 org.mybatis.spring.boot 下 mybatis-spring-boot-starter ,需要对应版本号提升到 2.2.1

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.1</version>
</dependency>

2、如果存在 tk.mybatis 下 mapper-spring-boot-starter ,对应去掉 mybatis依赖

<dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>${tk.mybatis.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.mybatis</groupId>
                        <artifactId>mybatis</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

3、原先项目中仅操作了1 ,2 二步操作,遗漏了最关键的操作。引入 mybatis 3.5.9 架包

        <mybatis.version>3.5.9</mybatis.version>
 
 <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

其实版本升级本质是 对应版本将低版本都 删除或者 接触低版本的依赖,替换成高版本 来进行依赖。

这里因为遗漏了 mybatis架包依赖,导致 使用到tk.mybatis 使用到mybatis报错。盲目随意引用同名注解,服务可以启用,但是具体业务调用报错。

这里来论述如何解决,jar版本升级中出现的错误。

1、升级版本,一般好的开源项目是支持高版本兼容低版本的接口以及实现的。但是存在一些接口跟实现在版本迭代中被废弃。

升级版本,平安无事,说明兼容性做的好。

升级版本,报错,意料之中。很大程度是你引入版本的时间跟目前较新版本的时间差距较大。如何进行修改?

像上面出现的问题,其实最应该操作的是第3步,引入mybatis 3.5.9架包,然后在个别jar中内部引用各自的 mybatis 中进行解除依赖。

这里比较合适的做法是,个别jar 是否存在对应mybatis 架包版本是3.5.9的,然后升级个别jar包的版本号。比如上述 1中的

org.mybatis.spring.boot 下 mybatis-spring-boot-starter , 由原来的 2 . 1 .0 升级为 2 .2 .1;

也可以是 原先jar中解除对该架包的依赖, 比如 上述 2 中的 tk.mybatis 下 mapper-spring-boot-starter 。去掉mybatis依赖。

去掉依赖之后,就必不可少要进行上述 3 的操作。添加mybatis 3.5.9架包。

这里需要在 整个项目的 pom.xml 中进行引入 该架包的操作,也就是上述的3;

其次需要在 解除对mybatis架包依赖的对应,具体项目使用中,也添加上mybatis架包依赖。 对应在 claimcenter - dal的pom.xml中

       <dependency>  【原先的引用,在pom.xml中 去掉了自身版本携带的mybatis依赖】
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>  【本次新增的mybatis架包,来替换mybatis依赖】
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>

这样就进行平等替换,升级了mybatis版本。

额外问题思考方法。也存在 某些方法在低版本中存在调用方法以及实现。在高版本中则不存在该方法调用。

1、要验证,是否是高版本对应方法或者实现被删除或者挪位置。 一般来说不被删除,对应高版本跟低版本应该是同一路径下。所以按照同一路径下文件以及文件内容进行比对,等到是否是被删除?

对应jar下载 可以上maven的网站下载 https://mvnrepository.com/

在这里插入图片描述

2、如果确定路径一致,那么基本是对应jar未导入导致的,或者对应子项目中未引入该jar导致。需要再检查一下pom.xml文件实现。

3、如果对应路径中不存在,以及对应版本jar内都无该方法或者实现。 那么就需要查看官方给出的替代方案。

3.1、基本思路是百度优先,对应版本号以及方法去百度查询,查询是否是后期被优化作废了,以及对应解决方案是什么?

3.2、手动查询当前最新版本的版本0 ,对应查询是否有该方法。一般好的开源项目版本迭代,作废的接口以及实现都会保留几个版本,缓慢替换,也会在官网或者版本发布时候提供解决方案。 这里查询办法类似二分法对比。 当前在使用的版本对应下一个大版本中进行查询是否存在,以及需要替换的高版本前对应的大版本进行查询是否存在,如果前者存在后者不存在,则去查询对应中间版本,依次去查询在具体哪个版本弃用,对应版本提供的官方文档中替换方案以及解决方法是什么?

续版本: 如何有效查询项目中是否有需要变更的版本。

1、查看。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYXVsGe7-1642489146116)(C:\Users\qijian\AppData\Roaming\Typora\typora-user-images\image-20220108133238260.png)]

对应jar是否有自己需要替换的,以及对应版本号是否恰当。

2、查看仅是知道存在,这里存在区分二种,一种是项目中直接引用的,该引用部分处理较为简单,在对应pom.xml进行搜索即可。

第二种隐蔽型,也就是非直接引用。但是你引用到的jar中,他们再去引用了。这部分就需要用下面方法了,修复方法是去除jar本身引用,然后把这部分修改成我们来直接引用。

比如在这里插入图片描述

xstram 对应是XStream 是一个简单的基于 Java 库,Java 对象序列化到 XML,反之亦然(即:可以轻易的将 Java 对象和 xml 文档相互转换)。

步骤 确定该jar的 路径名 这里是

com.thoughtworks.xstream:xstream

所以对应可执行mvn 语句为  
mvn dependency:tree -Dverbose -Dincludes=com.thoughtworks.xstream:xstream

执行效果如下 执行在 Terminal 中执行即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ek91jPoj-1642489146118)(C:\Users\qijian\AppData\Roaming\Typora\typora-user-images\image-20220118145405665.png)]

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8lDGKjY5-1642489146119)(C:\Users\qijian\AppData\Roaming\Typora\typora-user-images\image-20220108133801683.png)]

由上可知 对应在 org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:jar:2.1.1.RELEASE:compile 中存在 所以需要做处理

  <xstream.version>1.4.18</xstream.version>
 // 类似操作如下,解除原先的版本依赖,然后自己定义一个版本
 <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
      <exclusions>
        <exclusion>
          <groupId>com.thoughtworks.xstream</groupId>
          <artifactId>xstream</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>com.thoughtworks.xstream</groupId>
      <artifactId>xstream</artifactId>
      <version>${xstream.version}</version>
    </dependency>
    
    
    
这里罗列 需要改动到的版本号
fastjson  修正版本为1.2.78
com.alibaba:fastjson

所以对应可执行mvn 语句为  
mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjson


xstream     修正版本为1.4.18
com.thoughtworks.xstream:xstream

所以对应可执行mvn 语句为  
mvn dependency:tree -Dverbose -Dincludes=com.thoughtworks.xstream:xstream



log4j 2.x [对应修改版本2.x   修正为 2.17.1  对应1.x跳过]
log4j:log4j
mvn dependency:tree -Dverbose -Dincludes=log4j:log4j



mybatis    修正版本为 3.5.9
org.mybatis:mybatis
mvn dependency:tree -Dverbose -Dincludes=org.mybatis:mybatis



对应更正后,再执行以下,看对应版本是否正确

漫漫长路,一个小周跟他一个小陈朋友一起努力奔跑。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值