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 运行时映像来定期进行练习。
风险和假设
目前该工具的要求集尚未完成。该工具的可扩展性预计会不断发展。
依赖关系
-
该 JEP 取决于将由JSR 376(Java 平台模块系统)指定并由JEP 261:模块系统 实现的模块系统。
-
JDK 9 中JEP 220的初始实现使用自定义构建时工具来构建 JRE 和 JDK 映像。该工具将被替换
jlink
。