JDK8升级⾄JDK11步骤及要点
项⽬环境描述:
名称升级前版本升级后版本
JDK JDK 8JDK 11
Spring Boot 2.1.0 2.1.0
Spring Cloud Greenwich Greenwich
Eclipse Mars.2 Release (4.5.2)2019-09 R (4.13.0)
⼀、了解JDK11
1、版本说明
美国当地时间2018年9⽉25⽇,Oracle 官⽅宣布 Java 11 (18.9 LTS) 正式发布,可在⽣产环境中使⽤!这是⾃ Java 8 后的⾸个长期⽀持版本。按照 Oracle 公布的⽀持路线图,Java 11 将会获得 Oracle 提供的长期⽀持服务,直⾄2026年9⽉。
2、许可证
3、新特性
⼆、开发环境配置
1、JDK11下载与安装
(1)官⽅下载路径
(2)官⽅安装指南
(JDK11没有JRE安装,安装与配置相较以前更精简)
2、环境变量配置
替换Path中JDK8的Path⽬录,改为:C:\Program Files\Java\jdk-11.0.5\bin;
三、JAVA IDE适配版本
1、Eclipse
(1)Eclipse 4.9版本开始⽀持JDK11版本
(3)我下载的是Eclipse 2019-09 R (4.13.0) 版本
2、IntelliJ IDEA
(1)2018年9⽉份以前的版本,可能会存在⼀些问题,尽量下载2019.2版本。
四、修改开发配置
1、maven版本升级
(1)3.5.4版本(该版本以后可以不⽤升级)
(2)删除JAVA_HOME和CLASSPATH配置,mvn –v查看版本是否正确
jdk最新下载安装步骤(3)maven下载地址
(我下载的3.6.2版本,此版本侧重于性能改进、更好的内存占⽤和更少的 CPU 使⽤率)
(4)修改环境变量
MAVEN_HOME修改为:E:\Program Files\apache-maven-3.6.2
2、修改eclipse配置
(1)修改maven路径
(2)修改JDK路径
(3)修改Compiler为Java11
五、代码修改
1、编译报错
1、sun.misc.BASE64Encoder、sun.misc.BASE64Decoder不到类
(1)原因:JDK11中删除了sum.misc包
(2)解决⽅式:使⽤java.util.Base64.Encoder、java.util.Base64.Decoder替换
2、服务启动报错
(1)WARNING: Unable to start embedded Tomcat(启动eureka服务时)
原因:JDK11下使⽤最新的Greenwich版本的eureka默认情况下必定⽆法启动,⽇志提⽰内嵌的Tomcat没法启动。官⽅原⽂:
The JAXB modules which the Eureka server depends upon were removed in JDK 11. If you intend to use JDK 11 when running a Eureka server you must include these dependencies in your POM or Gradle file.
解决办法:加⼊JAXB依赖
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
(2)WARNING: Illegal reflective access by com.util.Fields
(file:/E:/WorkSpace/IDEs/MAVEN/RepositoryMicro/com/thoughtworks/xstream/xstream/1.4.10/xstream-1.4.10.jar) to field
java.util.TreeMapparator(启动客户端服务时)
原因:JDK9以后的版本,模块化的概念去除了JAXB(默认没有加载),需做接⼊声明。
解决办法:加⼊JAXB依赖
<!-- jdk11 jaxb模块引⽤ start -->
<dependency>
<groupId&l.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>l.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- jdk11 jaxb模块引⽤ end -->
笔者在JDK8的环境下,换到JDK11测试其兼容性,以上是过程记录。不同的环境升级到JDK 11,可能遇到的问题会有些许差异,但⼤致情况应该差不多。如有疑问,欢迎下⽅评论。
撰写不易,转载请注明出处,谢谢!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论