16

我正在尝试为我的 JAVA-9 应用程序/项目拼图创建跨平台/平台独立的可执行文件。

我认为 jlink 命令只会创建特定于平台的可执行文件/运行时。

4

2 回答 2

17

JLink(由JEP 282涵盖)创建模块化运行时映像(由JEP 220涵盖,特别是新运行时映像结构部分)。这些映像是 JRE、JDK 和紧凑型配置文件的概括,并且像它们一样是特定于操作系统的。因此,JLink 不能用于创建跨平台的可执行文件。

也就是说,可以在一个操作系统上运行 JLink 并为不同的操作系统创建运行时映像。为此,您所要做的就是为此下载并解压缩 JDK 9(与 JLink 的版本相同),并将其jmods文件夹放在 JLink 调用的模块路径上。

于 2016-05-13T14:43:36.060 回答
2

我知道这个问题很老,但由于在发布我自己的问题之前,它是我在谷歌搜索结果中排名靠前的结果之一,因此我决定也在这里记录我的发现。

在尝试使用jlinkJava 11 创建运行时映像时遇到了同样的问题。问题归结为错误地引用了目标 JDK 的jmods文件夹,这反过来意味着在模块路径中找不到 JDK 的模块。jlink然后默认在生成的运行时映像中包含宿主 JDK 的模块文件(以及相应的二进制文件、库等)。通过正确引用目标 JDK 的jmods目录,生成的运行时映像包含特定于平台的可执行文件和随附文件。

这是通过为 Windows、Linux 和 MacOS 创建运行时映像在 Windows 机器上测试的。

于 2021-02-07T08:58:53.137 回答