62

我们计划将我们的 Java 8 项目迁移到使用 Java 11。但我注意到 Java 11 没有 JRE 文件夹。

在 Java 9 和 Java 10 中,文件夹结构发生了变化,即java\jdk1.xjava\jre1.x,其中xJava 9 或 10。

但在 Java 11 中,我只得到一个文件夹,即java\jdk-11. 我的客户将如何在没有jre的情况下使用我的应用程序?

我的理解是Java 11正在强制模块化我们的应用程序,并且需要使用jlink来创建我们自己的jre来在客户端运行应用程序。

我的理解正确吗?

4

3 回答 3

86

20 年来,JDK 附带了一个 JRE,它只是安装在系统上不同目录中的其功能的一个子集。

事实上,它附带了两个相同的 JRE,一个安装在 JDK 安装目录内,一个安装在 JDK 安装目录之外。

这一直让我感到困惑,因为这样做完全浪费了维护人员的努力,并且完全浪费了您安装它的计算机上的磁盘空间,因为 JRE 只是复制了 JDK 可以做的一些事情已经做了。

最后,在 Java 11 中,Oracle 和 OpenJDK 团队决定结束这种愚蠢,只分发一个东西,JDK。安装后,这个 JDK 在您的硬盘上实际上比单独使用旧的 JRE 更小,甚至消除了您希望为磁盘空间有限的设备使用单独的 JRE 的有些有效的论点,这个论点从未解释为什么 2 个 JRE 会首先使用单个 JDK 安装,但为了证明需要 JRE 作为 JDK 的精简运行时环境是合理的。

因此,不需要单独的JRE,也很久没有了,更不用说包含并强制安装它作为JDK安装的一部分。

不,您不需要创建自己的 JRE。只需在客户端机器上安装 OpenJDK 并确保将 $JAVA_HOME/bin 添加到系统路径中,就像使用旧 JRE 一样。

哦,删除旧 JRE 安装程序的某些版本不会放置在那里的任何 java*.exe 文件的 Windows 目录树,以及一些 JRE 安装程序添加的一些奇怪条目的系统路径。

于 2018-10-01T07:46:36.977 回答
37

tl;博士

我的客户将如何在没有 jre 的情况下使用我的应用程序?

➥ 在基于 Java 的应用程序中捆绑 Java 实现。

学习关于:

细节

我的理解是 Java 11 正在强制模块化我们的应用程序

不,严格来说,不需要模块化。大多数现有应用程序可以在 Java 11 中按原样运行。您可以继续使用 Java 11 进行开发,而无需模块化代码。但在您的情况下,对于 GUI 桌面或移动应用程序,您需要在应用程序中打包 JVM。模块化和使用jlink工具可能是最好的方法。相比之下,基于 Servlet 的服务器端应用程序或微服务服务器还不需要模块化,尽管最终这样做可能是个好主意。

我注意到 Java 11 没有 JRE 文件夹。

Oracle 不再打算让最终用户安装 JRE 或 JDK。浏览器中的Java 小程序和Java Web Start应用程序交付都将被逐步淘汰,最终用户不再需要 JRE。基于 Java 的应用程序应捆绑自己的 Java 实现。唯一有意识地安装 JDK 的人是开发人员和服务器端系统管理员。

有些人对Java Everywhere梦想的破灭感到失望。他们可能会因为必须为每个主机操作系统(macOS、Linux、Windows 等)构建他们的应用程序而感到恼火。另一方面,一些开发人员很高兴将 Java 实现(现在比以往任何时候都小)与他们的应用程序捆绑在一起,因为这消除了最终用户下载-安装-更新系统范围内的 Java 实现的麻烦。还消除了与企业 IT 部门在用户 PC 上安装 Java 的斗争。将 Java 与应用程序捆绑在一起可以简化测试和支持,因为您可以准确了解和控制所涉及的 Java 版本和分发。顺便说一句,这种捆绑 Java 与应用程序并不是全新的:它在 macOS 和 iOS 应用程序商店中得到 Apple 多年的支持。

重要的:

这是一个流程图,可以帮助您在提供 Java 11 实现的各种供应商中找到并做出决定。

指导您为 Java 11 实施选择供应商的流程图


选择 Java 供应商的动机

于 2019-02-17T21:02:47.087 回答
11

查看AdoptOpenJDK 项目网站以下载最新的 JRE 和 JDK。

我已经使用他们的夜间版本来解决 JDK 包中缺少 JRE 的问题。只需将 JRE 解压到 JDK 文件夹中即可。

在此处输入图像描述

于 2018-12-17T12:40:42.373 回答