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

Can I make an installable 32-bit version of my app using jpackage (Java 17)

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

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

Azul Zulu 为各种平台提供 32 bit JDK+JavaFX 17 downloads。切换您的应用程序以使用它并使用它打包它 JDK。这样做时,(我认为)不需要提供 JavaFX Maven 依赖项,因为 JavaFX 模块已经可以从 Azul JDK+Java外汇平台分布。

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

根据楼主的评论,这个方法有效:

Azul JDK worked perfectly in windows (I'm using windows, and my client (who has 32 bit OS) also uses windows)

JavaFX packages in Maven central are available for various OS and 32-bit or 64-bit 平台架构。

您可以 select 来自特定架构(或架构组合)作为 Maven 中使用分类器的依赖项,similar to this example (without the shading)

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

如果 Mac 是您的目标设备,Mac OS X does not support 32-bit apps,因此 Mac 没有 32 位 Java/JavaFX 构建,只有针对任一 Intel 芯片的 64 位构建或新的 Apple M1 芯片。

有二进制 JavaFX 构建的受支持架构示例。这是基于对 JavaFX Maven 存储库中可用于二进制 jar 的分类器扩展的快速浏览。评论只是我对这些是什么的猜测,不是官方文档:

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

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

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

Gluon 通过 Gluon Mobile. I believe it is different from a jpackage solution and instead relies on native compilation using GraalVM 为各种移动架构提供 JavaFX 支持(但我可能是错的,我没有调查过)。不管它是如何工作的,如果您需要针对移动设备进行 JavaFX 部署,我建议您咨询 Gluon 及其移动开发、打包和部署解决方案。