最近在做安全整改的问题,要求将项目中的spring-data-redis版本升级到1.8.23.RELEASE,2.2.2.RELEASE还必须只指定的版本,低,高的版本还不行。不然不让你发布版本,
心想升个版本应该简单的。
于是打印了项目的maven依赖树,命令如下:
mvn dependency:tree
输出结果:
[INFO] +- org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.5.RELEASE:compile
[INFO] | \- org.springframework.data:spring-data-redis:jar:2.0.10.RELEASE:compile
[INFO] | +- org.springframework.data:spring-data-keyvalue:jar:2.0.10.RELEASE:compile
[INFO] | | \- org.springframework.data:spring-data-commons:jar:2.0.10.RELEASE:compile
[INFO] | \- org.springframework:spring-oxm:jar:5.0.9.RELEASE:compile
[INFO] +- org.apache.commons:commons-pool2:jar:2.5.0:compile
版本是2.0.10.RELEASE的。并且spring-boot-starter-data-redis引入的。是于是直接指定版本就是.
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
输出依赖树,版本确实更新到了2.2.2.RELEASE版本
[INFO] +- org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.5.RELEASE:compile
[INFO] +- org.apache.commons:commons-pool2:jar:2.5.0:compile
[INFO] +- org.springframework.data:spring-data-redis:jar:2.2.2.RELEASE:compile
[INFO] | +- org.springframework.data:spring-data-keyvalue:jar:2.0.10.RELEASE:compile
[INFO] | | \- org.springframework.data:spring-data-commons:jar:2.0.10.RELEASE:compile
[INFO] | +- org.springframework:spring-tx:jar:5.0.9.RELEASE:compile
[INFO] | \- org.springframework:spring-oxm:jar:5.0.9.RELEASE:compile
[INFO] +- redis.clients:jedis:jar:2.9.3:compile
启动项目,输出了如下错误,找不到相应的类。又是一个版本不兼容的问题
An attempt was made to call the method org.springframework.data.redis.repository.configuration.RedisRepositoryConfigurationExtension.registerIfNotAlreadyRegistered(Ljava/util/function/Supplier;Lorg/springframework/beans/factory/support/BeanDefinitionRegistry;Ljava/lang/String;Ljava/lang/Object;)V but it does not exist. Its class, org.springframework.data.redis.repository.configuration.RedisRepositoryConfigurationExtension, is available from the following locations:
jar:file:/D:/servers/repository/org/springframework/data/spring-data-redis/2.2.2.RELEASE/spring-data-redis-2.2.2.RELEASE.jar!/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtension.class
通过上面的依赖项指定是通过spring-boot-starter-data-redis引入的spring-data-redis.项目中使用spring-boot版本2.0.5.RELEASE.
那就直接升级到升级到2.2.2.RELEASE试试。
[INFO] +- org.springframework.boot:spring-boot-starter-data-redis:jar:2.2.2.RELEASE:compile
[INFO] | \- org.springframework.data:spring-data-redis:jar:2.2.3.RELEASE:compile
[INFO] | +- org.springframework.data:spring-data-keyvalue:jar:2.2.3.RELEASE:compile
[INFO] | | \- org.springframework.data:spring-data-commons:jar:2.2.3.RELEASE:compile
[INFO] | \- org.springframework:spring-oxm:jar:5.2.2.RELEASE:compile
打印依赖树后.从结果看,版本变高了到2.2.3.RELEASE。还是不符合相关的版本要求。心想把项目启动试试再说。
启动后项目报如下错误:
java.lang.NoClassDefFoundError: redis/clients/jedis/util/Pool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getDeclaredConstructors(Class.java:2020)
我去,又是个版本兼容性的问题。于是把springboot版本降低到2.2.1.RELEASE试试。不幸spring-data-redis输出的是2.2.1.RELEASE版本.
版本不符合,启动也报上面的错误。有点无语了,来来回回搞了1个多小时,加上明天要发布版本,使人容易产生焦虑,对自己能力怀疑。起来上个厕所,放松下。
回来后,想到在maven仓库包的索引去找找看[https://mvnrepository.com/]输入spring-data-redis。找到2.2.2.RELEASE的版本,找到Compile Dependencies(编译依赖).看了一遍
找到最后看到redis.clients » jedis (optional)版本的要求是3.1.0,于是想到上面都没有注意到jedis的版本。回过头去查查
jedis的版本是2.9.3,乖乖难怪。于是升级到3.1.0版本。启动项目后,终于看到没有报错了。这个时候才舒口气。项目启动不报错,对程序猿是多么幸福的一件事呀。
可是事情还没有完,通过上面操作项目启动了,可是spring-data-redis版本还是2.2.1的不符合要求。springboot在公司的仓库也没有匹配的版本。那就直接指定相应的版本2.2.2.RELEASE
试试,启动后项目一切正常。至此版本升级第一步终于完了。其他的功能需要在功能测试和使用中测试。
提交版本测试,发布系统后报jedis的版本只能是2.9.3, 3.5.1, 3.3.0这几个版本。好吧,那就升级半到3.3.0版本吧。启动后也正常,发布后,测试相关的功能后没啥问题,就提交测试了。
废话很多,但是确实是相应的过程。在日常的工作中,经常遇到版本升级的问题,特别是最近各种框架爆出的漏洞后。这样的工作经常有发生。说实在话,这样的工作费力不讨好。哎,继续干活吧!!!!