was升级jdk版本_从JDK8升级到JDK11,看这篇就足够了

本文详细介绍了从JDK8迁移到JDK11的过程,包括OpenJDK的普及、LTS版本的重要性以及Amazon Corretto的介绍。在迁移准备阶段,涵盖了开发环境更新、JPMS引入后的迁移工作,如Java EE模块调整、模块可见性问题、过期API替换等,并提到了一些框架的兼容性问题。
摘要由CSDN通过智能技术生成
原文地址:https://blog.codefx.org/java/java-11-migration-guide/。 在原文的基础上,增加了一些我遇到的具体的坑还有在特定场景下的解决方案,供大家参考

一些背景

在背景知识,我们会讨论一些关于新的JDK Release周期,OpenJDK特性归一化,LTS(Long-term support长期支持版本)的事情。

1. 新的发布周期

这个就可以长话短说了,反正我们知道如下两点就好:

  • 每六个月发布一个大更新(就是每年的3月还有9月)
  • 对于每个大版本更新,会有两次小版本更新(在发布后一个月或者四个月之后)

2. OpenJDK已可以作为新的线上标准JDK

在2018.9之前,Oracle JDK是大家普遍运用于线上的JDK,OpenJDK的特性并不完全,并且Oracle JDK号称做了很多优化。在2018.9之后,Oracle JDK正式商用(开发不收费,但是运行线上业务收费)。但是与此同时,Oracle宣布,OpenJDK与Oracle JDK在功能上不会有区别。并且,OpenJDK 11 RTS将会由红帽社区进行维护。这样,更加增加了可靠性与保证问题的及时解决。

我们可以在线上使用OpenJDK,开发时,使用任意的JDK。

3. LTS(Long-term support长期维护)版本

对于商业版的JDK,不同的厂商都将长期维护版本定在JDK 11/17/23/...

对于OpenJDK,社区说,对于这些版本,至少会提供四年的维护更新时间。每个长期维护版本都会有一个固定的管理者,对于OpenJDK11,应该就是红帽社区。现在源代码搞定了,但是,我们应该从哪里获取编译好的OpenJDK呢?这个可以交给AdoptOpenJDK,它会一直收集不同版本的OpenJDK以及全平台的build好的OpenJDK

4. Amazon Corretto

AWS也提供了自己的OpenJDK,Amazon Corretto:

  • 基于OpenJDK,采取GPL+CE协议,做了一些安全性,性能和稳定性优化,并且修复了一些bug
  • 支持linux,MAC OS还有Windows操作系统
  • 长期支持Java 8并且至少到2023年
  • 从2019年开始支持Java 11并且至少到2024
  • 季度更新,并且伴随一些紧急bug修复的更新

OpenJDK社区的FAQ部分曾经提到:“Amazon从2017年开始贡献OpenJDK,并且计划开始大量贡献”。我猜Amazon会把他们在Corretto上面做的优化,合并到OpenJDK源码中,即使没有,Corretto也是开源的,迟早会有人参考并在OpenJDK源码上进行修改。同时也说明,OpenJDK的更新也会及时被合并到Corretto中。

准备迁移

1. 更新好开发环境以及编译环境

各种常用工具,建议升级到如下版本以后:

  • IntelliJ IDEA: 2018.2
  • Eclipse: Photon 4.9RC2 with Java 11 plugin
  • Maven: 3.5.0
  • Maven compiler plugin: 3.8.0
  • surefire and failsafe: 2.22.0
  • Gradle: 5.0

对于如下工具,由于已经不再维护,需要替换成其他工具:

  • FindBugs(静态代码bug发现): 用SpotBugs替换。
  • Cobertura(代码测试覆盖率):用Jacoco替换

同时由于在Java 9 之后,每六个月bytecode level会提升一次。如果你依赖的库有处理字节码相关的库,应该注意下版本升级,例如:

  • 对于直接操作字节码的库,如果你升级了JDK,那么最好也跟着升级这些库:ASM (7.0), Byte Buddy (1.9.0), cglib (3.2.8), or Javassist (3.23.1-GA).这些版本是OpenJDK11适用的版本
  • 如果你使用的库依赖了上面提到的操作字节码的库,那么也需要注意下版本依赖,看依赖的操作字节码的库是否升级到了上面提到的版本。对于Spring,最好采用5.1以后的版本Mockito则是2.20.0以后的版本

2. 引入JPMS后,相关的迁移工作

2.1. Java EE相关模块默认不在Java包里面了,相关的类需要增加额外依赖或者替换成其他的类

如果你的项目中使用了这些类,那么在编译阶段就会报错,例如:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值