The jlink Command

名称

jlink - 将一组模块及其依赖项组装和优化成自定义运行时映像

概要

jlink [选项] --module-path 模块路径 --add-modules 模块 [, 模块...]

选项
由空格分隔的命令行选项。请参阅 jlink 选项
模块路径
jlink 工具发现可观察模块的路径。这些模块可以是模块化的 JAR 文件、JMOD 文件或已解压的模块。
模块
要添加到运行时映像的模块的名称。jlink 工具会添加这些模块及其传递依赖项。

描述

jlink 工具链接一组模块及其传递依赖项,以创建自定义运行时映像。

注意:

开发人员负责更新其自定义运行时映像。

--add-modules 模块 [, 模块...]
将指定的模块 模块 添加到默认的根模块集。默认的根模块集为空。
--bind-services
链接服务提供者模块及其依赖项。
-c ={0|1|2}--compress={0|1|2}

启用资源压缩:

  • 0: 无压缩
  • 1: 常量字符串共享
  • 2: ZIP
--disable-plugin 插件名称
禁用指定的插件。请参阅 jlink 插件,了解支持的插件列表。
--endian {little|big}
指定生成映像的字节顺序。默认值为系统架构的格式。
-h--help
打印帮助消息。
--ignore-signing-information
在链接运行时映像中的已签名模块化 JAR 时抑制致命错误。已签名模块化 JAR 的签名相关文件不会复制到运行时映像中。
--launcher 命令=模块--launcher 命令=模块/主类
为模块指定启动器命令名称,或为模块和主类指定命令名称(模块和主类名称用斜杠 (/) 分隔)。
--limit-modules 模块 [, 模块...]
将可观察模块的宇宙限制为指定模块 模块 的传递闭包,加上主模块(如果有)以及在 --add-modules 选项中指定的任何其他模块。
--list-plugins
列出可用的插件,您可以通过命令行选项访问;请参阅 jlink 插件
-p--module-path 模块路径

指定模块路径。

如果未指定此选项,则默认模块路径为 $JAVA_HOME/jmods。此目录包含 java.base 模块和其他标准和 JDK 模块。如果指定了此选项但无法从中解析出 java.base 模块,则 jlink 命令会将 $JAVA_HOME/jmods 追加到模块路径中。

--no-header-files
排除头文件。
--no-man-pages
排除 man 页面。
--output 路径
指定生成的运行时映像的位置。
--save-opts 文件名
jlink 选项保存在指定的文件中。
--suggest-providers [名称, ...]
建议从模块路径实现给定服务类型的提供者。
--version
打印版本信息。
@文件名

从指定文件中读取选项。

选项文件是一个文本文件,包含通常在命令提示符中输入的选项和值。选项可以出现在一行或多行上。您不能为路径名指定环境变量。您可以通过在行首加上井号符号 (#) 来注释掉行。

以下是 jlink 命令的选项文件示例:

#Wed Dec 07 00:40:19 EST 2016
--module-path mlib
--add-modules com.greetings
--output greetingsapp

注意:

未在本节中列出的插件不受支持,可能会发生变化。

对于需要 模式列表 的插件选项,值是一个逗号分隔的元素列表,每个元素使用以下形式之一:

要获取所有可用插件的完整列表,请运行命令 jlink --list-plugins

插件 compress

选项
--compress={0|1|2}[:filter=模式列表]
描述

压缩输出映像中的所有资源。

  • 级别 0: 无压缩
  • 级别 1: 常量字符串共享
  • 级别 2: ZIP

可以指定可选的 模式列表 过滤器,列出要包含的文件模式。

插件 include-locales

选项
--include-locales=语言标签[,语言标签]*
描述

包含语言标签为 BCP 47 语言标签的区域设置列表。此选项支持 RFC 4647 中定义的区域设置匹配。在使用此选项时,请确保添加模块 jdk.localedata。

示例:

--add-modules jdk.localedata --include-locales=en,ja,*-IN

插件 order-resources

选项
--order-resources=模式列表
描述

按优先顺序排列指定的路径。如果指定了 @文件名,则 模式列表 中的每一行必须与要排序的路径完全匹配。

示例:

--order-resources=/module-info.class,@classlist,/java.base/java/lang/

插件 strip-debug

选项
--strip-debug
描述
从输出映像中删除调试信息。

插件 generate-cds-archive

选项
--generate-cds-archive
描述
如果运行时映像支持 CDS 功能,则生成 CDS 存档。

以下命令在目录 greetingsapp 中创建一个运行时映像。此命令链接模块 com.greetings,其模块定义包含在目录 mlib 中。

jlink --module-path mlib --add-modules com.greetings --output greetingsapp

以下命令列出运行时映像 greetingsapp 中的模块:

greetingsapp/bin/java --list-modules
com.greetings
java.base@11
java.logging@11
org.astro@1.0

以下命令在目录 compressedrt 中创建一个运行时映像,该映像剥离了调试符号,使用压缩来减少空间,并包含法语语言区域信息:

jlink --add-modules jdk.localedata --strip-debug --compress=2 --include-locales=fr --output compressedrt

以下示例比较了运行时映像 compressedrt 与未剥离调试符号且不使用压缩的 fr_rt 的大小:

jlink --add-modules jdk.localedata --include-locales=fr --output fr_rt

du -sh ./compressedrt ./fr_rt
23M     ./compressedrt
36M     ./fr_rt

以下示例列出了实现 java.security.Provider 的提供者:

jlink --suggest-providers java.security.Provider

建议的提供者:
  java.naming 提供 java.base 使用的 java.security.Provider
  java.security.jgss 提供 java.base 使用的 java.security.Provider
  java.security.sasl 提供 java.base 使用的 java.security.Provider
  java.smartcardio 提供 java.base 使用的 java.security.Provider
  java.xml.crypto 提供 java.base 使用的 java.security.Provider
  jdk.crypto.cryptoki 提供 java.base 使用的 java.security.Provider
  jdk.crypto.ec 提供 java.base 使用的 java.security.Provider
  jdk.crypto.mscapi 提供 java.base 使用的 java.security.Provider
  jdk.security.jgss 提供 java.base 使用的 java.security.Provider

以下命令创建一个名为 mybuild 的自定义运行时映像,仅包括 java.namingjdk.crypto.cryptoki 及其依赖项,但不包括其他提供者。请注意,这些依赖项必须存在于模块路径中:

jlink --add-modules java.naming,jdk.crypto.cryptoki --output mybuild

以下命令类似于创建名为 greetingsapp 的运行时映像的命令,但会链接从根模块解析的模块,并进行服务绑定;请参阅 Configuration.resolveAndBind 方法。

jlink --module-path mlib --add-modules com.greetings --output greetingsapp --bind-services

以下命令列出了通过此命令创建的 greetingsapp 运行时映像中的模块:

greetingsapp/bin/java --list-modules
com.greetings
java.base@11
java.compiler@11
java.datatransfer@11
java.desktop@11
java.logging@11
java.management@11
java.management.rmi@11
java.naming@11
java.prefs@11
java.rmi@11
java.security.jgss@11
java.security.sasl@11
java.smartcardio@11
java.xml@11
java.xml.crypto@11
jdk.accessibility@11
jdk.charsets@11
jdk.compiler@11
jdk.crypto.cryptoki@11
jdk.crypto.ec@11
jdk.crypto.mscapi@11
jdk.internal.opt@11
jdk.jartool@11
jdk.javadoc@11
jdk.jdeps@11
jdk.jfr@11
jdk.jlink@11
jdk.localedata@11
jdk.management@11
jdk.management.jfr@11
jdk.naming.dns@11
jdk.naming.rmi@11
jdk.security.auth@11
jdk.security.jgss@11
jdk.zipfs@11
org.astro@1.0