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之外的已安装运行时。
答案 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
使用示例:-BjlinkOptions=compress=2
将使javapackager
运行jlink
并带有--compress=2
标记,生成具有Zip级别压缩的JRE图像。
另外,使用标记javapackager
运行-Bverbose=true
将准确显示哪些参数传递给jlink
,输出中的行如下所示:
userArguments = {strip-debug = 1 compress = 2}