下一个长期支持版本 Java 17 现已推出

1,766 阅读5分钟

下一个长期支持版本 Java 17 现已推出

Oracle 已经发布了 Java 编程语言和虚拟机的第17版。作为自2018 年JDK 11以来的第一个长期支持 (LTS) 版本,最终功能集中的 14 个 JEP 是:

Java 17的功能节奏与以前的版本相似,Java 16 中有 17 个功能,Java 15 中有 14 个功能,Java 14 中有 16 个功能。

Java 17 特性集中的两个 JEP,JEP 403 和 JEP 411,引起了 Java 社区的一些关注。我们在这里检查它们。

JEP 403:强封装 JDK 内部

作为 Project Jigsaw 的主要目标之一,JEP 403 建议对 JDK 的所有内部元素进行强封装,除了关键的内部 API,如**sun.misc.Unsafe,以提高 JDK 的安全性和可维护性。作为 JEP 396 的继承者,默认情况下强封装 JDK 内部--illegal-access,在 Java 17中将不再可能通过命令行选项绕过强封装。例如,尝试通过分配值permit**来使用此选项将产生以下警告:

$ java --illegal-access=permit {filename}.java

OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=permit;
  support was removed in 17.0
    

更多细节可以在这篇InfoQ 新闻报道中找到

JEP 411:弃用安全管理器以进行删除

多年来,安全管理器一直不是保护客户端 Java 代码的主要手段,也很少用于保护服务器端代码。目的是弃用在 Java 1.0 中引入的安全管理器,以便与 JEP 398 一起删除,弃用 Applet API for Removal。如JEP 411的风险和假设部分所述:

Jakarta EE 对安全管理器有几个要求。这些必须放松或删除,以便在安全管理器降级然后删除后兼容的应用程序在未来的 Java 版本上运行。

关注Jakarta EE 的未来发展Arjan Tijms,自雇软件顾问,作者和 23 个EE4J 项目的提交者,写作:

如前所述,在 Java SE 中删除安全管理器将影响 Jakarta EE。

目前 Jakarta EE 10 将面向 Java SE 11,因此理论上不会受此影响。但是,Jakarta EE 9.1(如 GlassFish)的实现今天已经在 JDK 17 上运行,并且必须处理控制台中有关安全管理器弃用的激进警告。因此,很可能所有 Jakarta EE 10 实现迟早都会接触到这一点。

我们并不确切知道安全管理器何时会被真正删除,但它会阻碍 EE 实现在任何版本上运行,无论是 Java SE 18、Java SE 19 等。这甚至涉及 API 人工制品,如安全管理器调用发生在这些。就目前而言,这些 API 人工制品在实际删除了安全管理器的 Java SE 版本上是不可使用的。

因此,最好在 EE 10 中为此做好准备。一个好的第一步可能是添加一个意向声明,即 Jakarta EE 确实计划遵循 Java SE 并在未来删除安全管理器的使用。目前这还不是很清楚,我注意到一些团队在就此事发表官方声明之前一直谨慎采取行动。

在 Java 18 中进一步弃用安全管理器的计划,大概是在后续 JEP 中,包括: 除非最终用户明确选择允许,否则阻止 Java 应用程序或库动态安装安全管理器;并降级其他安全管理器 API,使它们保持原样,但功能有限或没有功能。

更多细节可以在这篇InfoQ 新闻报道中找到

Java 17 是半满的玻璃杯吗?

今年早些时候,InfoQ 将这个即将发布的版本视为“半满”,并且比许多开发人员预期的要温和。这部分是由于记录 (JEP 395) 和密封类型 (JEP 409) 已在 Java 17 中完全交付,但模式匹配 (JEP 406) 仍处于预览阶段。

爪哇 18

目前,只有两个 JEP 被定位集成到 Java 18 中:

向目标提议的额外 JEP :

JEP 400 指定 UTF-8 是标准 Java API 的默认字符集,以确保所有实现、操作系统、区域设置和配置的一致性。

JEP 413为 Oracle 的标准 Doclet引入了**@snippet**标签,这是著名的 Java API 文档实用程序,可生成默认的 HTML 格式输出。目的是简化 API 文档中示例源代码的包含。

Java 18的发布日期尚未公布,但根据六个月的发布节奏,预计将于 2022 年 3 月中旬交付。开发人员可以预计功能会在 2021 年 12 月中旬冻结。

Java 17现在可以从 Oracle 下载,其他供应商的二进制文件预计将在未来几天内推出。