可以使用javapackager部署jlinked运行时吗?

时间:2018-05-16 01:39:25

标签: javapackager

Java SE部署指南/ Self-Contained Application Packaging中示例2-1上面的javapackager的说明指出-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之外的已安装运行时。

1 个答案:

答案 0 :(得分:4)

JDK 9及更高版本提供的javapackager使用jlink生成jre图像:

  

对于自包含的应用程序,Java Packager for JDK 9包   具有jlink工具生成的JDK 9运行时映像的应用程序。至   使用您的应用程序打包JDK 8或JDK 7 JRE,使用JDK 8 Java   打包。

     

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

     

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运行jlink并带有--compress=2标记,生成具有Zip级别压缩的JRE图像。

另外,使用标记javapackager运行-Bverbose=true将准确显示哪些参数传递给jlink,输出中的行如下所示:

  

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