我可以使用 jpackage (Java 17) 制作可安装的 32 位版本的应用程序吗

You*_*iss 4 java javafx javafx-11 jpackage java-17

我使用 Java 17 和 JavaFX 16 库制作了一个应用程序。有没有办法使用 JPackage 制作可安装的 32 位版本?由于自 Java 9 以来 Java 一直都是 64 位(与 JavaFX 库相同),我怀疑这是不可能的,但是有什么办法可以做到吗?

jew*_*sea 6

是的,您可以使用 (Java 17) 制作可安装的 32 位版本的 JavaFX 应用程序jpackage

Azul Zulu 提供适用于各种平台的 32 位 JDK+JavaFX 17 下载。切换您的应用程序以使用它并使用该 JDK 打包它。这样做时,(我认为)不需要提供 JavaFX Maven 依赖项,因为 JavaFX 模块已经可以从 Azul JDK+JavaFX 平台发行版中获得。

我不会在这里提供有关如何使用 jpackage 的完整步骤,因为这已在其他地方记录和讨论。

从原贴的评论来看,这个方法有效:

Azul JDK 在 Windows 中完美运行(我使用的是 Windows,我的客户端(拥有 32 位操作系统)也使用 Windows)

或者

Maven 中心中的 JavaFX 包可用于各种操作系统和32 位或 64 位平台架构。

您可以使用分类器从特定架构(或架构组合)中选择作为 Maven 中的依赖项,类似于此示例(没有阴影)

如果您选择这种方式,则需要确保在打包时正确选择适当的底层 JDK(选择 32 位 JDK 构建而不是 64 位 JDK 构建)。同样,Azure Zulu(可能还有其他 JDK 供应商)提供了您可以使用的 32 位 JDK 版本。

如果 Mac 是您的目标设备,则Mac OS X 不支持 32 位应用程序,因此没有适用于 Mac 的 32 位 Java/JavaFX 版本,只有针对 Intel 芯片或新 Apple M1 芯片的 64 位版本。

二进制 JavaFX 构建所支持的架构示例。这仅基于对 JavaFX Maven 存储库中二进制 jar 可用的分类器扩展的快速查看。这些评论只是我对这些内容的猜测,而不是官方文档:

  • linux-aarch64(linux arm v8 64 位)。
  • linux-arm32(linux arm v7 32 位)。
  • Linux(Linux 英特尔 64 位)。
  • mac-aarch64(mac M1 64 位)。
  • mac(mac 英特尔 64 位)。
  • win-x86(赢得英特尔 32 位)。
  • 赢(赢英特尔 64 位)。

如果没有提供分类器,我认为构建将检查您当前的操作环境并选择最适合的。

此外,对于某些平台,分类器中还有带有 -monocle 后缀的构建,还提供适用于各种操作系统类型的 32 位和 64 位版本。这是针对嵌入式设备或无头设备(无显示器,例如服务器),并提供不使用操作系统提供的窗口系统的 JavaFX 版本(即窗口纯粹由 JavaFX 管理,而不是 X-windows 窗口管理器)不是 Windows 操作系统窗口管理器)并且可以使用软件渲染而不是硬件渲染。大多数人不需要这个,但如果有兴趣,请参阅(最小)Monocle 文档

Gluon 通过Gluon Mobile为各种移动架构提供 JavaFX 支持。我相信它与 jpackage 解决方案不同,而是依赖于使用GraalVM的本机编译(但我可能是错的,我还没有调查它)。无论它如何工作,如果您需要针对移动设备进行 JavaFX 部署,我建议您咨询 Gluon 及其移动开发、打包和部署解决方案。