JDK 8 升级 JDK 17
首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点
- 遇到问题别放弃
- 仔细阅读报错,精确到每个单词每一行,不是自己项目的代码也要点进去看看源码到底是为啥报错
- 明确你项目引入的包,升级到 JDK17 后对应低版本的都需要升级
可能大部分同学都不是完全了解自己的项目都依赖了什么包,这个升级工作一定会加深你对 maven 包管理的理解,以及你对你项目依赖的熟悉程度和你解决排查问题的能力。
项目跑不起来就慢慢调试,问题暂时解决不了就放一放,放松一下,交给下个阶段头脑清醒的自己。
升级你的 maven 编译版本
修改你主工程的 pom 文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
我用的是 idea 修改你项目的编译环境

从新拉 maven 之后你就可以看看哪里报红哪里需要改了,别担心,噩梦才刚刚开始哈哈哈
去除重复依赖
长时间的维护,可能存在一个包在一个 pom 里引入两次的情况 (真服了)
首先项目中 pom 文件不可以出现重复依赖,需要排查去掉
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
对于依赖版本,不可以直接出现 RELEASE,你可以定义一个 properties 然后引用一下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
一些依赖的版本升级
这部分只列举我再升级过程中遇到的需要升级的问题
升级 lombok 到 1.18.26
lombok 得用新版本 我之前是 1.18.4 现在换到 26
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
升级 springboot 到 2.7.14
你可以在官方文档看到 2.7.14 对应的一些依赖版本
https://docs.spring.io/spring-boot/docs/2.7.14/reference/html/dependency-versions.html#appendix.dependency-versions
<spring.boot.version>2.7.14</spring.boot.version>
<spring.version>5.3.29</spring.version>
<dubbo.version>2.7.23</dubbo.version>
说一下我这里为什么没有选择拥抱 3.x ,因为 dubbo 3 才支持 springboot 3.x 和 spring6.x,而我调用的三方接口都是 dubbo2,dubbo3 应用基本注册不向下兼容 dubbo2,会有诸多问题,所以这里选择
2.7.14 GA 这个官网稳定支持的版本,如果你没有这个问题,可以选择拥抱 3.0
提醒一下如果要升级 springboot3
springboot3 弃用了 javax.servlet.http.HttpServletRequest; 需要替换为 jakarta.servlet.http.HttpServletRequest;
HandlerInterceptorAdapter 被删除了,由 HandlerInterceptor 来代替
yml 配置允许循环依赖
spring:
main:
allow-circular-references: true
三方包依赖找不到类
我引入的三方包,Spring bean 加载存在问题,感觉是 JDK 升级的问题,跟 spring 的升级没关系
是找不到这个玩意的定义 org.apache.commons.configuration.interpol.ConfigurationInterpolator
nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.configuration.interpol.ConfigurationInterpolator
很怪,明明有就找不到,这里将三方包的引入排除掉,自己项目中单独进行引入
<exclusion>
<artifactId>commons-configuration</artifactId>
<groupId>commons-configuration</groupId>
</exclusion>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
</dependency>
顺便提一个 springbean 加载的问题,如果你引入的三方包有路径下的 bean 需要你进行注册管理,你项目启动类的扫描路径下需要包含他的路径,比如
@SpringBootApplication(scanBasePackages = {"com.你的包","com.三方的需要扫描的包路径"})
当然,如果路径一致,就一个就可以
zookeeper 升级 3.5.10
升级 zookeeper 版本为 3.5.10 , 3.5.x 以下不兼容 JDK17
https://curator.apache.org/zk-compatibility-34.html 还有个 curator 强依赖的场景需要注意升级
如果你服务器的 zookeeper 可以升级最好不过,如果不能
curator 2.x 可以兼容 zookeeper 3.5.x 的版本
如果你之前使用的是 curator 2.x 就只升级 zookeeper 的版本就行了,这样连接你线上的 zookeeper 不会有问题。
否则请将服务器版本同步升级
可参考文章:
官方文章 https://curator.apache.org/zk-compatibility-34.html
csdn 文章 https://blog.csdn.net/wo541075754/article/details/69138878
<apache-curator.version>2.12.0</apache-curator.version>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${apache-curator.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${apache-curator.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
mysql 版本升级 8.0.33
没啥好说的,不升你连不上
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
启动项


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
14156285194)]
[外链图片转存中…(img-PJab7VGW-1714156285194)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
本文详细介绍了从JDK 8升级到JDK 17的步骤,包括升级maven编译版本、去除重复依赖、依赖版本更新等关键环节。在升级过程中遇到的如lombok、springboot、zookeeper和mysql的版本匹配问题以及Spring Bean加载问题等,都有针对性的解决方案。强调了升级过程中理解项目依赖和深入解决问题的重要性。

1万+

被折叠的 条评论
为什么被折叠?



