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].
如果我使用等效的非模块化 jar,则生成的包包括完整的运行时。但我想使用/dist 文件夹中的 jlink 减少的运行时间。
javapackager 命令可以使用 jlink 生成的运行时部署吗?
如何?
标题为“自定义 JRE”的部分没有提及
javapackager
命令。
以下部分“模块化应用程序打包”具有以下行:
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。
请您参考如下方法:
javapackager
JDK 9 及更高版本提供使用 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
您甚至可以将参数传递给
jlink
使用
-BjlinkOptions=<options>
此外,
-Bruntime
仅对使用
-deploy -native jnlp
部署的软件包有效
用于编译模块化应用程序,而不是
-srcdir
, 使用
--module-path <dir>
,然后使用
-m <module name>
指定主模块.
编辑:虽然没有关于
-BjlinkOptions
的文档,它存在于 javapackager 源代码中
jdk.packager/jdk.packager.internal.legacy.JLinkBundlerHelper
示例用法:
-BjlinkOptions=compress=2
将使
javapackager
运行
jlink
与
--compress=2
标志,生成具有 Zip 级别压缩的 JRE 图像。
此外,运行
javapackager
带有标志
-Bverbose=true
将准确显示哪些参数被传递给
jlink
在输出中有这样一行:
userArguments = {strip-debug=1 compress=2}