JEP 336:弃用 Pack200 工具和 API
概述
弃用 pack200
和 unpack200
工具,以及 java.util.jar
中的 Pack200
API。
动机
想要弃用(并最终移除)Pack200 有三个原因:
-
从历史上看,通过 56k 调制解调器缓慢下载 JDK 是 Java 普及的一个障碍。JDK 功能的持续增长导致下载大小不断膨胀,进一步阻碍了普及。使用 Pack200 压缩 JDK 是缓解该问题的一种方法。然而,时代已经改变:下载速度得到了改善,而且 JDK 9 为 Java 运行时环境(JEP 220)和用于构建运行时环境的模块(JMOD)引入了新的压缩方案。因此,JDK 9 及更高版本不再依赖于 Pack200;JDK 8 是最后一个在构建时使用
pack200
压缩并在安装时使用unpack200
解压的版本。总之,Pack200 的主要使用者之一——JDK 本身——不再需要它。 -
除了 JDK,使用 Pack200 压缩客户端应用程序(尤其是小程序)也很有吸引力。一些部署技术(例如 Oracle 的浏览器插件)会自动解压小程序 JAR 文件。然而,客户端应用程序的格局已经发生了变化,大多数浏览器已停止支持插件。因此,Pack200 的主要使用者之一——在浏览器中运行的小程序——不再是将 Pack200 包含在 JDK 中的驱动因素。
-
Pack200 是一种复杂且精细的技术。其文件格式与类文件格式和JAR 文件格式紧密相关,而这两种格式都以 JSR 200 无法预见的方式进行了演变。(例如,JEP 309 在类文件格式中添加了一种新的常量池条目,而 JEP 238 向 JAR 文件格式添加了版本元数据。)JDK 中的实现分散在 Java 和原生代码之间,这使得维护变得困难。
java.util.jar.Pack200
中的 API 对 Java SE 平台的模块化不利,导致 Java SE 9 中删除了它的四个方法。总体而言,维护 Pack200 的成本很高,并且超过了将其包含在 Java SE 和 JDK 中所带来的好处。
描述
java.base
模块中的三种类型将被终止弃用,即使用 @Deprecated(forRemoval=true)
注解:
java.util.jar.Pack200
java.util.jar.Pack200.Packer
java.util.jar.Pack200.Unpacker
包含 pack200
和 unpack200
工具的 jdk.pack
模块也将被终止性弃用。
运行 pack200
或 unpack200
时,将显示有关该工具计划移除的警告。运行带有子选项 n
的 jar -c
(用于规范存档)时,将显示有关该子选项计划移除的警告。这三种工具的文档都将标明它们已被弃用并计划移除。
将会为在未来 JDK 特性版本中实际移除这些类型和模块单独提交一份 JEP。