带有jlink压缩标记的Java9打包程序

问题描述 投票:5回答:2

当我们创建jlink运行时映像时,我们可以使用'--strip-debug',' - compress','2',' - no-header-files',' - no-man-pages'等标签,创建一个45mb左右的分发文件夹。

如果我们想使用javapackager,例如创建.DMG文件,我们如何进行类似的压缩?因为这些标签不适用于javapackager。如果没有它们,最终的捆绑包大约是100mb,失去了很多java9模块化优势,所以我的问题是如果可以将javapackager与jlink创建的JRE运行时映像一起使用。

谢谢

java java-9 jigsaw jlink javapackager
2个回答
4
投票

回答我自己的问题,我们可以使用两者的组合:

对于MacOSX示例:

1)使用jlink生成运行时dist,如果使用compress标签,这将创建一个大约50mb的lib文件夹。

2)使用javapackager生成MacOSX.app,这个.app将附带一个大约98mb的运行时lib文件夹。

3)简单替换它们,右键单击MacOSX.app->“show package contents”,然后转到Plugins / Java.runtime / Contents / Home /并将lib文件夹替换为jLink生成的文件夹。

这样,由于美观的Java9模块,您拥有一个大约50mb而不是100mb的独立Java应用程序。

使用javapackager完成所有这些操作会很酷,如果有可能我找不到,我建议使用gradle之类的东西用1命令执行所有这个过程。


4
投票

您可以将选项传递给传递给jlink进程的JDK 9 javapackager

用于控制jlink的javapackager选项

-BjlinkOptions=compress=2
or
-BjlinkOptions=strip-debug

我无法弄清楚如何同时通过这两个。

-BjlinkOptions="compress=2 strip-debug"

导致java.lang.IllegalArgumentException

-BjlinkOptions="strip-debug compress=2"

-BjlinkOptions=strip-debug具有相同的结果

当选项-BjlinkOptions=...多次传递给javapackager时,只考虑最后一个。

jlink选项no-header-filesno-man-pages似乎在这里无效,因为它们在-BjlinkOptions=之后传递时会导致NPE。

© www.soinside.com 2019 - 2024. All rights reserved.