如果 JVM<JRE<JDK 为什么我安装最新版本的 JDK,还需要安装特定的 JRE 才能运行游戏?

If JVM<JRE<JDK why if I install the last version of JDK, a specific JRE installation is also required to make games work?

JRE 是否包含在 JDK 安装中,还是我错了?为什么我必须专门安装 JRE 才能玩基于 Java 的游戏,例如 Minecraft?

Is JRE contained in JDK installation?

前 Java 11 是但 post Java 11 不是

Why do I have to install specifically the JRE in order to play games based on Java, for example Minecraft?

看起来从 Java 11 开始,事情发生了变化:

If JVM<JRE<JDK

这不是真的,但 JRE < JDK 或多或少是真的。

a specific JRE installation is also required to make games work?

实际上,JRE 已经死了; java8 现在已经超过 5 年了,并且是最后一个以 JRE 为预期分发模型的版本。 JRE 模型的工作原理如下:

  • 开发人员安装 JDK 并使用它构建他们的 java 应用程序。
  • 开发人员向最终用户发送了一堆 jar 文件。
  • 最终用户将从例如oracle 并安装它。该用户和 oracle 一起对此进行维护(保持更新,例如关闭 JRE 中的安全漏洞);开发者根本不参与其中。

JRE 之所以存在,是因为它可以更简单、更小,并且可以简化最终用户而非开发人员的下载和维护。

这也是游戏需要 JRE 的原因:JDK 通常不附带托管安全更新,因为 JDK 针对的是假定更好地了解并保持最新状态。 (他们当然不会,但那是另一个问题)。

此模型已过时。新模型是:

  • 开发人员安装 JDK 并使用它构建他们的 java 应用程序。
  • 他们使用 jlink 或其他安装程序创建工具来生成安装程序,然后将其发送给最终用户。 jlink 可以在没有开发人员工具的情况下制作 JDK 的自定义缩减版本,并且只需要 java 库的那些部分。换句话说,甚至比 JRE 还小。
  • 最终用户安装。他们与 oracle 或任何其他 'JRE provider' 没有任何安排,并且他们的系统上不需要 JRE;即使有,也不会被使用。将任何更新(包括安全更新)分发到缩减的java运行使用时间完全由应用程序制造商负责。

后一种模型实际上是大多数 'runs on the desktop' java 软件的分发方式:要求用户安装 JRE 很烦人,而且也不可靠:如果您的应用程序不安装怎么办运行 在 jre8 上,因为您是为 jre6 编写的,而 8 中更新的内容破坏了您的应用程序,但最终用户更新了他们的 jre?

现在后一种模型是官方模型,这让你的问题基本上没有实际意义。

Minecraft 大概需要更新其部署。

注意:一些公司,例如 Azul,仍在分发他们称之为 'jre11' 的东西。这些分布适用于无法轻易从 'user maintains a JRE, developer distributes just jar files' 的旧分布模型过渡但又想使用新的 java 功能的商店。 Oracle 不分发这些,而且这种分发模型同样过时。 'obsolete' 并不意味着 'impossible',只是 'not recommended / you need to find some time to move away from it / definitely do not do this for new projects'.