JEP 282: jlink: The Java Linker | 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
是包含生成的运行时映像的目录
--module-path
、--add-modules
和 --limit-modules
选项在 JEP 261 中有进一步详细描述。
jlink
将支持的其他选项包括:
--help
打印使用 / 帮助消息--version
打印版本信息
备选方案
与链接工具相对应的备选方案是使用特定于平台的 JDK 和 JRE 映像构建脚本。这种方法将使得创建自定义运行时映像变得困难。
测试
除了预期的一组单元测试来测试该工具之外,JDK 构建还将定期通过创建 JDK 和 JRE 运行时映像来测试 jlink
。
风险和假设
目前为止,该工具的要求集并不完整。预计该工具的可扩展性将会发展。
依赖关系
此 JEP 依赖于 JSR 376 (Java Platform Module System) 所指定的模块系统,并由 JEP 261:模块系统 实施。
JDK 9 中 JEP 220 的初始实现使用自定义的构建工具来构建 JRE 和 JDK 映像。该工具将被
jlink
替代。