猿问

如何在 Java 11 中使用没有 JRE 的 JDK

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

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

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

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

我的理解正确吗?


绝地无双
浏览 158回答 2
2回答

翻过高山走不出你

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 安装程序添加的一些奇怪条目的系统路径。

红颜莎娜

我的客户将如何在没有 jre 的情况下使用我的应用程序?➥ 在基于 Java 的应用程序中捆绑 Java 实现。学习关于:Java平台模块系统jlink ( JEP 282 )jpackage ( JEP 343 )细节我的理解是 Java 11 正在强制模块化我们的应用程序不,严格来说,不需要模块化。大多数现有应用程序都可以在 Java 11 中按原样运行。您可以继续在 Java 11 中进行开发,而无需模块化代码。但就您而言,对于 GUI 桌面或移动应用程序,则需要在您的应用程序中打包 JVM。模块化和使用jlink工具可能是最好的方法。相比之下,服务器端基于 Servlet 的应用程序或微服务服务器还不需要模块化,尽管最终这样做可能是个好主意。我注意到 Java 11 没有 JRE 文件夹。Oracle 不再打算让最终用户安装 JRE 或 JDK。浏览器中的Java Applet和Java Web Start应用程序交付都将被逐步淘汰,最终用户无需 JRE。基于 Java 的应用程序应该捆绑自己的 Java 实现。唯一有意识地安装 JDK 的人将是开发人员和服务器端系统管理员。有些人对Java Everywhere梦想的破灭感到失望。他们可能会对必须为每个主机操作系统(macOS、Linux、Windows 等)构建应用程序而感到恼火。另一方面,一些开发人员很乐意将 Java 实现(现在比以往任何时候都小)与他们的应用程序捆绑在一起,因为这消除了最终用户下载-安装-更新系统范围的 Java 实现的麻烦。还消除了与企业 IT 部门在用户 PC 上安装 Java 的麻烦。将 Java 与应用程序捆绑在一起可以简化测试和支持,因为您知道并准确控制所涉及的 Java 版本和发行版。顺便说一句,这种捆绑 Java 的应用程序并不是全新的:Apple 多年来一直在 macOS 和 iOS 应用程序商店中支持它。重要的:清楚了解OpenJDK项目的性质,如维基百科中所述阅读 Oracle 2018-03 的这份白皮书,Java 客户端路线图更新阅读由 Java 社区的主要成员撰写的白皮书Java Is Still Free。这是一个流程图,可以帮助您在提供 Java 11 实现的各种供应商中查找和决定。
随时随地看视频慕课网APP

相关分类

Java
我要回答