Skip to content
微信扫码关注公众号

JEP 282: jlink: The Java Linker | jlink:Java 链接器

摘要

创建一个工具,该工具可以根据 JEP 220 中定义的模块集及其依赖关系,组装和优化成一个自定义的运行时映像。

非目标

此 JEP 并不承诺生成除模块化运行时映像之外的任何内容。

本 JEP 的目标并不是为插件定义标准或受支持的 API。相反,插件 API 将 严格作为实验性质。在使用本 JEP 定义的插件 API 后,未来的 JEP 可能会重新审视这个问题。

动机

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

连接时是进行 整体 优化的机会,这些优化在编译时很难进行,而在运行时成本很高。一个例子是当所有输入都变成常量(即已知)时优化计算。随后的优化将是删除不再可达的代码。

描述

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

shell
$ 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 映像构建脚本。这种方法将使得创建自定义运行时映像变得困难。

测试

除了预期的一组单元测试来测试该工具之外,JDK 构建还将定期通过创建 JDK 和 JRE 运行时映像来测试 jlink

风险和假设

目前为止,该工具的要求集并不完整。预计该工具的可扩展性将会发展。

依赖关系