当我们创建jlink运行时映像时,我们可以使用标签,例如' - strip-debug',' - compress',' 2',&# 39; - no-header-files',' - no-man-pages' ,创建一个45mb左右的分发文件夹。
如果我们想使用javapackager,例如创建.DMG文件,我们如何进行类似的压缩?因为这些标签不适用于javapackager。如果没有它们,最终的捆绑大约是100mb,失去了很多java9模块化优势,所以我的问题是如果可以将javapackager与jlink创建的JRE运行时映像一起使用。
感谢
答案 0 :(得分:4)
回答我自己的问题,我们可以使用两者的组合:
对于MacOSX示例:
1)使用jlink生成运行时dist,如果使用压缩标签,这将创建一个大约50mb的lib文件夹。
2)使用javapackager生成MacOSX.app,这个.app将附带一个大约98mb的运行时lib文件夹。
3)简单替换它们,右键单击MacOSX.app-> “show package contents”,然后转到Plugins / Java.runtime / Contents / Home /并将lib文件夹替换为jLink生成的文件夹。
这样你就有了一个自包含的Java应用程序,大约50mb而不是100mb,这要归功于漂亮的Java9模块。
使用javapackager完成所有这些操作会很酷,如果有可能我找不到,我建议使用gradle之类的东西用1命令执行所有这个过程。
答案 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-files
和no-man-pages
似乎无效,因为它们会在-BjlinkOptions=
之后传递给NPE。