Jlink - 组装和优化模块集
介绍 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 filename
将 jlink
选项保存在指定的文件中。
--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.naming
和 jdk.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 日