跳到主要内容

JEP 282:jlink:Java 链接器

概括

创建一个工具,可以将一组模块及其依赖项组装和优化为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是将包含生成的运行时映像的目录

JEP 261中更详细地描述了--module-path--add-modules、 和选项。--limit-modules

jlink其他支持的选项包括:

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

备择方案

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

测试

除了用于练习工具 I 的预期单元测试集之外,JDK 构建还将jlink通过创建 JDK 和 JRE 运行时映像来定期进行练习。

风险和假设

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

依赖关系