系列中的上一篇
当前教程
Jlink - 组装和优化模块集
系列中的下一篇

系列中的上一篇: Jar - 存档工具

系列中的下一篇: Jmod - 创建 JMOD 存档

Jlink - 组装和优化模块集

 

jlink - 组装和优化一组模块及其依赖项,并将它们组合成一个自定义运行时映像。本文提供了一个参考,有关如何在实践中使用它的教程,请参见此处.

 

概要

jlink [options] --module-path modulepath --add-modules module [, module...]

options 由空格分隔的命令行选项。请参见 jlink 选项。

modulepath jlink 工具发现可观察模块的路径。这些模块可以是模块化 JAR 文件、JMOD 文件或展开的模块。

module 要添加到运行时映像的模块名称。jlink 工具会添加这些模块及其传递依赖项。

 

描述

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

--add-modules mod[, mod...] 将命名模块 mod 添加到默认的根模块集。默认的根模块集为空。

--bind-services 链接服务提供者模块及其依赖项。

--compress=zip-[0-9] 配置映像的压缩,值越高,压缩程度越大。示例压缩级别

  • zip-0: 无压缩
  • zip-6: 默认
  • zip-9: 最大压缩

--endian {little|big} 指定生成的映像的字节序。默认值为系统体系结构的格式。

-h--help 打印帮助消息。

--ignore-signing-information 当在运行时映像中链接签名的模块化 JAR 时,抑制致命错误。签名的模块化 JAR 的签名相关文件不会复制到运行时映像。

--launcher command=module--launcher command=module/main 指定模块的启动器命令名称或模块和主类的命令名称(模块和主类名称用斜杠 / 分隔)。

--limit-modules mod[, mod...] 将可观察模块的范围限制为命名模块 mod 的传递闭包,加上主模块(如果有),加上在 --add-modules 选项中指定的任何其他模块。

--list-plugins 列出可用的插件,您可以通过命令行选项访问这些插件。请参见 jlink 插件。

-p--module-path modulepath 指定模块路径。

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

--no-header-files 排除头文件。

--no-man-pages 排除手册页。

--output path 指定生成的运行时映像的位置。

--save-opts filenamejlink 选项保存在指定的文件中。

--suggest-providers [name, ...] 建议从模块路径实现给定服务类型的提供者。

--version 打印版本信息。

@filename 从指定的文件中读取选项。

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

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

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

 

选项

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

  • glob-pattern
  • glob:glob-pattern
  • regex:regex-pattern
  • @filename
    • filename 是包含要使用的模式的文件的名称,每行一个模式。

 

插件

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

compress 选项

--compress={0|1|2}[:filter=pattern-list]

描述

Compresses all resources in the output image.

Level 0: No compression
Level 1: Constant string sharing
Level 2: ZIP
An optional pattern-list filter can be specified to list the pattern of files to include.

include-locales 选项

--include-locales=langtag[,langtag]*

描述

Includes the list of locales where langtag is a BCP 47 language tag.
This option supports locale matching as defined in RFC 4647.
Ensure that you add the module jdk.localedata when using this option.

示例

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

order-resources

选项

--order-resources=pattern-list

描述

Orders the specified paths in priority order.
If @filename is specified, then each line in pattern-list must be an exact match for
the paths to be ordered.

示例

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

strip-debug

选项

--strip-debug

描述

Strips debug information from the output image.

 

示例

以下命令在 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

Suggested providers:
  java.naming provides java.security.Provider used by java.base
  java.security.jgss provides java.security.Provider used by java.base
  java.security.sasl provides java.security.Provider used by java.base
  java.smartcardio provides java.security.Provider used by java.base
  java.xml.crypto provides java.security.Provider used by java.base
  jdk.crypto.cryptoki provides java.security.Provider used by java.base
  jdk.crypto.ec provides java.security.Provider used by java.base
  jdk.crypto.mscapi provides java.security.Provider used by java.base
  jdk.security.jgss provides java.security.Provider used by java.base

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

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

以下命令类似于创建名为 greetingsapp 的运行时映像的命令,只是它将链接从根模块解析的模块,并进行服务绑定

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

更多学习


上次更新: 2021 年 9 月 14 日


系列中的上一篇
当前教程
Jlink - 组装和优化模块集
系列中的下一篇

系列中的上一篇: Jar - 存档工具

系列中的下一篇: Jmod - 创建 JMOD 存档