5

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

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

谢谢

4

2 回答 2

4

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

对于 MacOSX 示例:

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

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

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

这样你就有了一个独立的 Java 应用程序,大约 50mb 而不是 100mb,这要归功于漂亮的 Java9 模块。

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

于 2017-11-15T16:07:22.903 回答
4

您可以将一个选项传递给 JDK 9 ,该选项将javapackager传递给 jlink 进程。

控制 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=.

于 2018-03-19T00:49:31.217 回答