跳到主要内容

JEP 282: jlink:Java 链接器

QWen Max 中英对照

概述

创建一个工具,该工具可以将一组模块及其依赖项组装并优化为自定义运行时映像,如 JEP 220 中所定义。

非目标

该 JEP 并未承诺生成除模块化运行时镜像以外的任何内容。

此 JEP 的目标并非定义插件的标准或受支持的 API。相反,插件 API 将是严格实验性的。一旦通过此 JEP 定义的插件 API 获得了使用经验,未来的 JEP 可能会重新审视这一主题。

动机

JEP 261链接时间定义为编译阶段(javac 命令)和运行时阶段(java 运行时启动器)之间的一个可选阶段。链接时间需要一个链接工具,该工具将组装并优化一组模块及其传递依赖项,以创建运行时映像或可执行文件。

链接时间是进行全局优化的一个机会,而这些优化在编译时通常难以实现,或者在运行时成本较高。例如,当一个计算的所有输入都变为常量(即,不再是未知数)时,可以对该计算进行优化。接下来的优化步骤是移除那些不再可达的代码。

描述

链接器工具 jlink 的基本调用方式为:

$ jlink --module-path <modulepath> --add-modules <modules> --limit-modules <modules> --output <path>

哪里:

  • --module-path 是链接器发现可观测模块的路径;这些模块可以是模块化 JAR 文件、JMOD 文件或解压后的模块

  • --add-modules 指定要添加到运行时镜像中的模块名称;这些模块可以通过传递依赖关系,导致额外的模块被添加

  • --limit-modules 限制可观测模块的范围

  • --output 是包含生成的运行时镜像的目录路径

--module-path--add-modules--limit-modules 选项在 JEP 261 中有更详细的描述。

jlink 将支持的其他选项包括:

  • --help 打印使用/帮助信息
  • --version 打印版本信息

替代方案

链接工具的替代方法是使用特定于平台的 JDK 和 JRE 镜像构建脚本。这种方法将使得创建自定义运行时镜像变得困难。

测试

除了用于测试工具 I 的预期单元测试集之外,JDK 构建过程还会通过创建 JDK 和 JRE 运行时镜像来定期测试 jlink

风险与假设

该工具的需求集合目前尚未完成。预计该工具的可扩展性将会不断发展。

依赖