具有模块支持的 Java 运行时环境 (JRE)?

问题描述 投票:0回答:2

在搜索 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 javafx openjfx
2个回答
7
投票

tl;博士

两家供应商提供了适用于 Java 17、21 和当前 22 的 JDK/JRE 产品版本,与实现 JavaFX 的现代 OpenJFX 库捆绑在一起:Azul SystemsBellSoft

详情

了解 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 项目提供了辅助工具:jlinkjpackage

最前沿的技术是使用 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。


1
投票

您应该尝试使用

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

© www.soinside.com 2019 - 2024. All rights reserved.