java - 将 JavaFX 应用程序与 openjdk 11 + 运行时捆绑在一起
问题描述
我创建了一个依赖 OpenJDK 11 和 JavaFX 的小型 HelloWorld Java 应用程序。该应用程序打包在一个 jar 文件中,只有在我的系统上分别安装了 Java 11 和 JavaFX 时才能运行该文件。
现在我想将我的 jar 转换为一个独立的 Java 应用程序,其中包括 JavaFX 和一个功能齐全的 Java 运行时环境。这将允许我在不安装 OpenJDK 11 的情况下运行我的应用程序(这会带来技术障碍,例如正确设置 PATH 等)。
我可以找到有关在 Java 10 上创建自包含 Java 应用程序的信息,但找不到有关将 Java 应用程序与 OpenJDK 11 和 JavaFX 捆绑在一起的信息。
如何使用 OpenJDK 11 和 JavaFX 发布自包含的 Java 应用程序(包括 Java 运行时)?
解决方案
模块化 Java、jlink和jpackage
在从Oracle分拆到Gluon之后,请按照在JavaFX 的新家中找到的这些教程进行操作。
您将需要使用模块化 Java 编写代码。将 JavaFX 11 作为依赖项添加到您的项目中。并使用新的链接/打包工具将 JDK 的子集捆绑到您的应用程序中。
学习关于:
- Java平台模块系统
- jlink ( JEP 282 )
- jpackage ( JEP 343 )
不再有 JRE
Oracle 不再打算让最终用户安装 JRE 或 JDK。浏览器中的Java 小程序和Java Web Start应用程序交付都将被逐步淘汰,最终用户不再需要 JRE。基于 Java 的应用程序应捆绑自己的 Java 实现。唯一有意识地安装 JDK 的人是开发人员和服务器端系统管理员。
重要的:
- 清楚地了解OpenJDK项目的性质,如Wikipedia 中所述。
- 知道甲骨文已承诺在其自有品牌的甲骨文 JDK和OpenJDK项目之间实现功能平等。该承诺包括捐赠以前的商业功能,例如飞行记录器和任务控制。
- OpenJFX是 JavaFX 的开源开发,是OpenJDK项目的一部分。OpenJFX 可能包含也可能不包含在 OpenJDK 的构建中。Java 规范不需要 JavaFX 功能。
- 至少有两家供应商提供了与 OpenJFX 库捆绑在一起的 JDK 产品版本:
- Azul Systems 的ZuluFX
- 来自 BellSoft 的LibericaFX
- 阅读 Oracle 于 2018 年 3 月发布的这份白皮书,Java 客户端路线图更新
- 阅读由 Java 社区的主要成员撰写的白皮书Java Is Still Free 。
这是一个流程图,可以帮助您在提供 Java 11 实现的各种供应商中找到并做出决定。
推荐阅读
- angular - 如何正确地将不可观察的转换为可观察的?
- google-sheets - 如果在单元格范围内重复突出显示
- regex - 有没有办法在 awk match() 函数 'match($0,/r{0,var}/)' 中使用变量来定义范围
- flutter - 应用程序被终止时 Flutter 隔离不显示通知
- angular - 如何使用表单数组([])和来自 API 的数据使用 *ngFor 迭代多个复选框
- ruby - 有条件地在一行中分配函数的返回值
- javascript - 使用计算结果自动填充输入字段
- oracle - 我如何编写 PLSQL 查询来一次更新多个表的授权访问 |SQL Developer|
- c# - DeserializeObject 导致空白变量 C#
- reactjs - 如何将函数的返回更改为int?