第一章 入门准备

章节概要
本小节的目的是帮助你识别潜在的问题,并在你将现有的Java应用程序迁移到最新JDK版本时为你提供有关迁移的建议。本章节还会着重对新版本所做的改进和增强进行介绍和讲解。本小节的目的是帮助你识别潜在的问题,并在你将现有的Java应用程序迁移到最新JDK版本时为你提供有关迁移的建议。本章节还会着重对新版本所做的改进和增强进行介绍和讲解。

本章节所讲的内容包含如下几个部分:

  • JDK 11 发生的重大改变
  • 迁移到JDK 11前的准备工作
  • 从JDK 8 以及其后续版本迁移到JDK 11

1.1 JDK 11 发生的重大改变

在迁移的你应用到JDK 11 之前,你应该需要去了解JDK 11 和 JDK 10 两个版本之间的更新和改变。如果你从JDK 8 迁移到JDK 11,你还需要去了解从JDK 8以及其后续版本迁移时,各个版本之前存在的差异。
以下列举的是JDK 11 中一些重要的更改:

  • 甲骨文公司不再提供JER和Server JRE的下载服务;因此JDK的自动更新服务将不再可用。
  • 甲骨文公司将不再提供支持32位Windows系统的安装包。
  • JDK中将不再提供Java Web Start, Java Plugin以及Java控制面板。
  • JDK中将不再包含JavaFX。你可以从https://openjfx.io/ 上单独下载。
  • JAXB和JAX-WS不再和JDK捆绑在一起,详情请查看 删除Java EE和CORBA模块

1.2 删除部署堆栈

Java在JDK 9 已将部署技术启用,在JDK 11 中已经被移除。以此同时,Java applet、Web start、Java plugin、Java Applet Viewer、Java控制面板、Java Web Start以及Javaws工具在JDK 11 中已经被删除。

1.3 删除Java EE 和 CORBA(Comment Object Request Broker Architecture)模块

在JDK 11 中,Java EE 和CORBA 已经被删除,但是不推荐在JDK 9 中删除这些模块。被删除的模块如下所示:

  • java.xml.ws:用于XML Web服务的Java API(JAX-WS),用于Java平台的Web服务元数据以及用于Java附件的SOAP(SAAJ)
  • java.xml.bind:用于XML绑定的Java体系结构(JAXB)
  • java.xml.ws.annotation:Java SE定义的JSR-250 common Annotations的子集,用于支持Web服务
  • java.corba:CORBA(公共对象请求代理体系结构)
  • java.transaction:Java SE 定义的Java Transaction API的子集,用于支持CORBA对象的事务服务
  1. java.activation:JavaBean Activation Framework
  2. java.se.ee:上面六个模块的聚合模块
  3. jdk.xml.ws:JAX-WS工具集
  4. jdk.xml.bind:JAXB工具集

如何不对代码进行重构,JDK 11 将不会编译应用上述API中所涉及到的类,同理,除非调整应用程序的部署方式,你的应用程序才能正常运行,否则你的应用程序将会因为引用了上述被删除的API中的类而导致报NoDefClassFoundError异常或者ClassNotFoundException异常。

提示:
你可以从Maven仓库中下载JAXB和JAX-WS

1.4 安全更新

JDK 11 版本包括传输层安全性(TLS)1.3规范(RFC 8446)的实现。
TLS 1.3 是传输层安全性(TLS)协议的最新版本(2018年8月),在JDK 11 中默认启用。此版本不仅关注速度的快慢,还通过增强现代加密技术来更新协议的整体安全性。

1.4.1 删除安全证书

以下几个顶级证书已经从JDK 11 的信任库中删除:

  • Symantec 顶级证书
  • Baltimore Cybertrust 代码签名证书
  • SECOM顶级证书
  • AOL和Swisscom顶级证书

如果继续使用以上几类顶级证书,在JDK 11 中有可能失效,需要慎重考虑后再使用。如果仍然需要将以上的证书添加到信任库中,可以参考Java平台的keytool。

1.5 JDK 11 中删除的API、工具和组件

本小节将列举在JDK 11 中被删除的API,工具和组件的详细信息。

1.5.1 JDK 11 中删除的API

以下的API在JDK 11 中已经被删除。这些API在JDK 11之前的版本就已经被废除,并且已经被后面更新的API所替换。有关可能的替代方案的信息,可以参阅JDK 11 API规范。

javax.security.auth.Policy 
java.lang.Runtime.runFinalizersOnExit(boolean)
java.lang.SecurityManager.checkAwtEventQueueAccess() 
java.lang.SecurityManager.checkMemberAccess(java.lang.Class,int)
java.lang.SecurityManager.checkSystemClipboardAccess()
java.lang.SecurityManager.checkTopLevelWindow(java.lang.Object)
java.lang.System.runFinalizersOnExit(boolean)
java.lang.Thread.destroy()
java.lang.Thread.stop(java.lang.Throwable)

1.5.2 JDK 11 中不再提供的工具和组件

以下将列举JDK 11 中不再提供的工具和组件信息:
1.主要工具:

  • Appletviewer

2.CORBA 工具:

  • Idlj
  • Orbd
  • Servertool
  • Tnamesrv

此外,rmic(RMI编译器)将不再支持-idl或者-iiop选项。

3.Java Web 服务工具:

  • Schemagen
  • Wsgen
  • Wsimport
  • Xjc
    4.Java 部署工具
  • javapackager
  • javaws

提示:
Pack 200 和unpack 200 已经被废弃,在未来的JDK版本中有可能被删除

5.监控工具

  • Jmc:在JDK 11 中,JMC不再捆绑在JDK中,而是作为独立的程序包提供。

6.JVM-MANAGEMENT-MIB.mib

  • SNMP对JVM进行监控和管理的规范已经被删除

7.SNMP代理

  • jdk.snmp模块已经被删除

8.特定删除了甲骨文桌面

  • 甲骨文的JDK T2K字体光栅器已经被删除
  • Lucida字体:甲骨文JDK不再提供任何字体,所有字体都依赖于操作系统上安装的字体

本文由创作和发表,采用 CC BY 3.0CN协议进行许可,转载请注明作者及出处。本文作者, 原文标题为Java 11 的重大改变。原文链接为:https://www.ramostear.com/tutorial/2018/09/26/1.html

是技术也是艺术