可以使用 javapackager 部署 jlinked 运行时吗?
Can a jlinked runtime be deployed with javapackager?
javapackager
Java SE 部署指南中示例 2-1 上方的说明/Self-Contained Application Packaging 指出 -deploy 命令中需要一个 jar 文件。
如果我使用模块化 jar,我会收到此错误消息:
Exception: java.lang.Exception: Error: Modules are not allowed in srcfiles: [dist\tcdmod.jar].
如果我使用等效的 non-modular jar,生成的包将包含完整的运行时。但是我想使用 /dist 文件夹中的 jlink 减少的运行时间。
javapackager 命令可以使用 jlink-generated 运行时进行部署吗?
怎么样?
标题为 "Customization of the JRE" 的部分没有提及 javapackager
命令。
下面的部分 "Packaging for Modular Applications" 有一行:
Use the Java Packager tool to package modular applications as well as non-modular applications.
Java Packager 工具与 javapackager
不同吗?本节中没有使用 javapackager
的示例。
这是我使用的 javapacker 命令:
javapackager -deploy -native -outdir packages -outfile ToneCircleDrone -srcdir dist -srcfiles tcdplain.jar -appclass com.adonax.tanpura.TCDLaunch -name "ToneCircleDrone" -title "ToneCircleDrone test"
javapackager文档中的说明没有提到使用jlink运行时的场景。有一个 Bundler 参数 -Bruntime 但它仅用于指向除系统默认值 AFAIK 之外的已安装运行时。
JDK9及以上版本提供的javapackager
使用jlink
生成jre镜像:
For self-contained applications, the Java Packager for JDK 9 packages
applications with a JDK 9 runtime image generated by the jlink tool. To
package a JDK 8 or JDK 7 JRE with your application, use the JDK 8 Java
Packager.
https://docs.oracle.com/javase/9/tools/javapackager.htm#JSWOR719
您甚至可以使用 -BjlinkOptions=<options>
将参数传递给 jlink
此外,-Bruntime
仅对使用 -deploy -native jnlp
部署的包有效
要编译模块化应用程序,请使用 --module-path <dir>
而不是 -srcdir
,然后使用 -m <module name>
.
指定主模块
编辑:虽然 -BjlinkOptions
上没有文档,但它存在于 javapackager 源代码中
jdk.packager/jdk.packager.internal.legacy.JLinkBundlerHelper
示例用法:-BjlinkOptions=compress=2
将使 javapackager
运行 jlink
带有 --compress=2
标志,生成具有 Zip 级别压缩的 JRE 图像。
此外,带有标志 -Bverbose=true
的 运行ning javapackager
会准确地向您显示哪些参数被传递给 jlink
,输出中有这样一行:
userArguments = {strip-debug=1 compress=2}
javapackager
Java SE 部署指南中示例 2-1 上方的说明/Self-Contained Application Packaging 指出 -deploy 命令中需要一个 jar 文件。
如果我使用模块化 jar,我会收到此错误消息:
Exception: java.lang.Exception: Error: Modules are not allowed in srcfiles: [dist\tcdmod.jar].
如果我使用等效的 non-modular jar,生成的包将包含完整的运行时。但是我想使用 /dist 文件夹中的 jlink 减少的运行时间。
javapackager 命令可以使用 jlink-generated 运行时进行部署吗? 怎么样?
标题为 "Customization of the JRE" 的部分没有提及 javapackager
命令。
下面的部分 "Packaging for Modular Applications" 有一行:
Use the Java Packager tool to package modular applications as well as non-modular applications.
Java Packager 工具与 javapackager
不同吗?本节中没有使用 javapackager
的示例。
这是我使用的 javapacker 命令:
javapackager -deploy -native -outdir packages -outfile ToneCircleDrone -srcdir dist -srcfiles tcdplain.jar -appclass com.adonax.tanpura.TCDLaunch -name "ToneCircleDrone" -title "ToneCircleDrone test"
javapackager文档中的说明没有提到使用jlink运行时的场景。有一个 Bundler 参数 -Bruntime 但它仅用于指向除系统默认值 AFAIK 之外的已安装运行时。
JDK9及以上版本提供的javapackager
使用jlink
生成jre镜像:
For self-contained applications, the Java Packager for JDK 9 packages applications with a JDK 9 runtime image generated by the jlink tool. To package a JDK 8 or JDK 7 JRE with your application, use the JDK 8 Java Packager.
https://docs.oracle.com/javase/9/tools/javapackager.htm#JSWOR719
您甚至可以使用 -BjlinkOptions=<options>
jlink
此外,-Bruntime
仅对使用 -deploy -native jnlp
要编译模块化应用程序,请使用 --module-path <dir>
而不是 -srcdir
,然后使用 -m <module name>
.
编辑:虽然 -BjlinkOptions
上没有文档,但它存在于 javapackager 源代码中
jdk.packager/jdk.packager.internal.legacy.JLinkBundlerHelper
示例用法:-BjlinkOptions=compress=2
将使 javapackager
运行 jlink
带有 --compress=2
标志,生成具有 Zip 级别压缩的 JRE 图像。
此外,带有标志 -Bverbose=true
的 运行ning javapackager
会准确地向您显示哪些参数被传递给 jlink
,输出中有这样一行:
userArguments = {strip-debug=1 compress=2}