【问题标题】:How to bundle and launch a native Mac/Windows application with Java 11?如何使用 Java 11 捆绑和启动本机 Mac/Windows 应用程序?
【发布时间】:2019-02-19 08:12:53
【问题描述】:

不幸的是,javapackager 工具将随 JDK 11 一起删除 - 因为它是 JavaFX 的一部分,也将被删除。因此,将不再有“官方”和简单的方法来为 Mac 或 Windows 创建原生 Java 应用程序包。

我尝试重新使用由 Java 9/10 的 javapackager(在 Mac 上:my.app/Contents/MacOS/my)生成的本机启动器文件,它们似乎仍然可以与 JDK 11 一起使用。但是,这有点肮脏的解决方案。有关如何使用 Java 11 及更高版本(首选 Mac 平台)本地打包和启动应用程序的任何想法?

【问题讨论】:

  • 提出了一种新工具来填补空白:bugs.openjdk.java.net/browse/JDK-8200758,但它还没有针对特定版本。
  • 是的,我已经看过那个 JEP。所以似乎有必要,但没有希望快速实施。而且也不确定您是否能够使用 OpenJDK 打包器/捆绑器来捆绑 Oracle JDK。
  • 从 JDK14 开始,您现在可以使用 jpackage,如下所示:stackoverflow.com/a/66511673/191246(仍在孵化中)

标签: java javafx bundle javafx-11


【解决方案1】:

您可以使用jlink 命令,它将您的模块捆绑到自定义运行时映像中。不过,这与 javapackager 有点不同,需要您使用模块才能使其正常工作。如果您从 JRE 中手动指定所需的所有模块,您也许可以在没有模块的情况下使其工作。

【讨论】:

  • 嗨!我已经在使用 jlink 来创建一个尽可能小的自定义 JRE。但是,jlink 不会创建本机启动器文件。它有一个启动器选项,但它只是创建一个 shell 脚本,它的行为不像原生 Mac 应用程序(例如 Dock 中的错误图标)。然而,javapackager 创建了一个本地启动器文件,该文件通过本地代码启动捆绑的 VM。
  • 啊,我明白了。 OSX应用程序基本上不是特殊的拉链吗?如果是这样,编写一个捆绑必要文件并设置图标等的脚本不是很容易吗?
  • 原则上你是对的。那些 .app 包不是 zip,只是特殊的目录结构。手动创建一个确实很容易。然而关键是launcher程序,它必须是一个本地程序,并且应该启动VM和主类。
  • 如果您喜欢冒险,编写一个启动 jar 的基本 C 程序应该不难,或者甚至可以使用 GraalVM 的 native-image 工具将 jar 编译为 ELF 二进制文件?
【解决方案2】:

正如 ccpizza 上面评论的那样:

从 JDK14 开始,您现在可以使用 jpackage,如下所示:stackoverflow.com/a/66511673/191246(仍在孵化中)– ccpizza

【讨论】:

  • 为什么这是公认的答案?我在搜索 Java 11 捆绑时发现了这个问题。提到的答案是关于 Java 14.
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 2014-10-08
  • 2019-04-10
  • 1970-01-01
  • 2015-03-28
  • 2015-05-18
  • 2011-12-29
  • 2020-09-03
相关资源
最近更新 更多