7

Java SE 部署指南/自包含应用程序打包javapackager中的示例 2-1 上面的说明指出 -deploy 命令中需要一个 jar 文件。

如果我使用模块化 jar,我会收到以下错误消息:

异常:java.lang.Exception:错误:srcfiles 中不允许使用模块:[dist\tcdmod.jar]。

如果我使用等效的非模块化 jar,则生成的包包括完整的运行时。但我想使用 /dist 文件夹中的 jlink 减少的运行时间。

javapackager 命令可以使用 jlink 生成的运行时部署吗?如何?

标题为“自定义 JRE”的部分没有提及该javapackager命令。

以下部分“模块化应用程序打包”具有以下行:

使用 Java Packager 工具来打包模块化应用程序以及非模块化应用程序。

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。

4

1 回答 1

4

javapackagerJDK 9 及更高版本提供的用于jlink生成 jre 映像:

对于自包含应用程序,JDK 9 的 Java Packager 使用由 jlink 工具生成的 JDK 9 运行时映像来打包应用程序。要将 JDK 8 或 JDK 7 JRE 与您的应用程序打包,请使用 JDK 8 Java Packager。

https://docs.oracle.com/javase/9​​/tools/javapackager.htm#JSWOR719

您甚至可以将参数传递给jlinkusing-BjlinkOptions=<options>

此外,-Bruntime仅对使用部署的包有效-deploy -native jnlp

-srcdir对于编译模块化应用程序,使用代替--module-path <dir>,然后使用 . 指定主模块-m <module name>

编辑:虽然没有关于 的文档-BjlinkOptions,但它存在于 javapackager 源代码中

jdk.packager/jdk.packager.internal.legacy.JLinkBundlerHelper

https://github.com/teamfx/openjfx-10-dev-rt/blob/bf971fe212e9bd14b164e4c1058bc307734e11b1/modules/jdk.packager/src/main/java/jdk/packager/internal/legacy/JLinkBundlerHelper.java#L96

示例用法:-BjlinkOptions=compress=2将使用标志javapackager运行,生成具有 Zip 级别压缩的 JRE 图像。jlink--compress=2

此外,javapackager使用该标志运行-Bverbose=true将向您准确显示正在传递的参数jlink,输出中的一行如下所示:

userArguments = {strip-debug=1 compress=2}

于 2018-05-30T21:50:08.650 回答