在搜索 JRE 来运行我的(基于 javafx 的)桌面应用程序时,我从此处找到了 JRE 版本 8 https://www.java.com/en/download/manual.jsp 。这是默认设置,当我单击 Oracle 网站上的 JRE 链接时,我将被重定向到此处 (https://www.oracle.com/downloads/#category-java)
但是,JRE 显然不支持
--module-path
,因为它太旧了。
在非开发人员机器上运行应用程序有哪些选项? (请注意,JRE 为 60MB,JDK 为 190MB)。
请问为什么默认下载的JRE太旧了?
我的应用程序使用 openjdk 17.0.9 2023-10-17 进行编译
两家供应商提供了适用于 Java 17、21 和当前 22 的 JDK/JRE 产品版本,与实现 JavaFX 的现代 OpenJFX 库捆绑在一起:Azul Systems 和 BellSoft。
了解 JavaFX 从未成为 Java 的标准部分。
并了解 JavaFX 现在已在开源项目 OpenJFX 中实现。该项目正在由 Oracle 公司和 Gluon 公司共同领导的持续积极开发中。
多年前,Oracle 选择将 JavaFX 库与其一些 JDK/JRE 产品捆绑在一起。后来他们停止捆绑了。
Oracle 只是提供 JDK/JRE 产品的几家供应商之一。有关 Java 生态系统的说明,请参阅 Java 仍然免费。
一些 JDK/JRE 供应商目前选择在其产品的某些版本中捆绑作为 OpenJFX 实现的 JavaFX 库。我知道至少有两家这样的供应商:
Java 平台模块系统于 2017 年在 Java 9 及更高版本中推出。上面列出的供应商为模块化 LTS 版本 11、17 和 21 以及当前版本(现在为 22)提供 JavaFX 捆绑包。
JavaFX 22 需要 JDK/JRE 17 或更高版本。
或者,您可以将 OpenJFX 库捆绑到您的应用程序中。您可以将 JRE 捆绑到您的应用程序中,并且可以选择精简 JRE 以仅包含您的应用程序实际使用的部分。 OpenJDK 项目提供了辅助工具:jlink 和 jpackage。
最前沿的技术是使用 GraalVM 技术从 JavaFX 项目生成本机应用程序。
你问:
但是,JRE 显然不支持 --module-path,因为它太旧了。
Java 9 及更高版本具有 Java 平台模块系统 (JPMS)。请重点关注 LTS 版本(11、17、21)和当前版本(22),因为其他版本已达到生命周期终点。最新版本的 OpenJFX 支持 Java 17 及更高版本。
在非开发人员机器上运行应用程序有哪些选项?
如果您可以控制用户计算机(例如在企业或教育环境中),请考虑让系统管理员安装与必要的 OpenJFX 库捆绑在一起的 JRE。
在利基市场中,也许您可以要求用户安装与 OpenJFX 库捆绑在一起的 JRE。
在广阔的零售市场中,您需要在应用程序中捆绑 JVM 和 OpenJFX 库。 Apple App Store 等应用程序市场将接受此类产品。
(请注意,JRE 为 60MB,JDK 为 190MB)。
您可以通过在 JPMS 模块化项目中使用 jlink 工具来大大减小该大小。
请问为什么默认下载的JRE太旧了?
“原因”很简单,Oracle 后来决定停止将 JavaFX 库与其自己的 JDK/JRE 产品捆绑在一起。
但是您可以免费将 OpenJFX 库捆绑到您自己的应用程序中。
并且,您可以选择从 Oracle 以外的供应商获取与 OpenJFX 库捆绑在一起的最新版本的 Java JDK/JRE。您可以获得免费产品以及付费支持的产品。
我的应用程序使用 openjdk 17.0.9 2023-10-17 进行编译
然后您可以在针对 Java 17 进行编译时使用 OpenJFX 22。
您应该尝试使用
jlink
来制作兼容的JRE。您可以从仅包含您使用的 JavaFX 模块的 JRE 开始。例如:
set JAVAFX_MODS=C:\java\javafx-jmods-21
jlink --module-path "%JAVAFX_MODS%" --add-modules javafx.base,javafx.controls,javafx.graphics --strip-debug --no-man-pages --no-header-files --output jre-fx
这意味着您可以使用
jre-fx\bin\java
来启动使用 JavaFX 的类
之后,您还可以使用
jlink
使用自己的模块制作 JRE,如果您对 JavaFX 具有正确的依赖关系并设置了模块路径,则新的 JRE 将包含运行您的应用程序所需的所有内容:
jlink --module-path "%JAVAFX_MODS%;your-module-dir" --add-modules yourmodule --strip-debug --no-man-pages --no-header-files --output jre-all
使用这个新的 JRE -
jre-all\bin\java
- 您只需指定启动类名称,所有模块都包含在内。
如果您需要为其他计算机分发应用程序,请查看 jpackage 来构建安装程序 - Windows 上的 EXE/MSI 或 Mac/Linux 上的其他打包程序。可以将其设置为使用预生成的 JRE 和
jpackage --runtime-image jre-all
,也可以在每次启动时在内部为您使用 jlink
。