如何使Java 11运行时环境工作,因为没有可供下载的JRE 11?

85

Java 11没有像过去的Java版本一样提供可下载的JRE。当运行某些基于Java的软件时,我遇到了“没有Java运行时环境”的错误。为解决此问题,我需要安装Java 8 JRE。

既然没有可以下载的JRE 11,那么如何使我的电脑运行Java 11 JRE呢?

我正在使用Windows 10操作系统。


类似内容:另请参阅:如何在 macOS 上获取 Java 11? - Basil Bourque
2
这里提供了所有 JDK 提供者的最全面的答案:https://dev59.com/bVQK5IYBdhLWcg3wHcWi。 - pdem
1
@pdem - 这个问题是关于JRE提供商,而不是JDK提供商。所链接的问答并没有提到JREs。 - Stephen C
3年前就有人提出了这个问题... - gumuruh
4个回答

80

Stephen C的回答是正确且重要的。

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

重要提示:

了解:

现在预期桌面应用程序捆绑自己的Java运行时。上述工具可以创建非常小的运行时,以适合您特定的应用程序。

这是一个流程图,可以帮助您在提供Java 11实现的各个供应商中进行选择和决策。

Flowchart guiding you in choosing a vendor for a Java 11 implementation.png


并且有一张表格,列出了可能导致建议使用Java供应商的动机或考虑因素。

Motivations in choosing a vendor for Java

兼容性问题

在评论中,有人提出了一个问题,担心不同厂商发布的版本之间存在兼容性问题。

首先,要知道OpenJDK项目包括一个称为OpenJDK社区技术兼容性套件(TCK)的大量测试套件。厂商可以自行声明他们的版本是否通过了这些测试。这些声明没有得到验证,依赖于诚信系统。在我的图表上,我已经在几个我知道已经自我声明的厂商上打了“TCK”的勾:Oracle JDK由Oracle和Zulu由Azul Systems。

我图表上蓝色桶区域中列出的所有产品都几乎直接基于OpenJDK源代码构建。所以一般来说,你应该看到几乎完全相同的兼容性。

您可能需要考虑两个方面的问题:技术差异和更新/补丁的时间表。

至于技术差异,使用OpenJDK项目的厂商可以使用HotSpot引擎OpenJ9引擎进行发货。它们的性能(启动速度快/慢与整体速度、更多/更少的内存)会有所不同,但它们遵守Java规范的行为应该是相同的。它们可能会有所不同,当然,其中任何一个都可能出现另一个缺乏的缺陷(很快就会修复)。个人而言,我不会担心这个问题,但我为了完整性而提到它。

另一个技术差异是由Azul Systems的Zing和Oracle的GraalVM使用的不同类型的JVM。这两者中的任何一种可能会以某种方式与彼此或其他产品有所不同,因为它们有意采用不同类型的JVM实现,以提供特殊功能。但考虑到Java规范的严谨性,它们不应该不兼容。如果它们不兼容,您可以期待任何兼容性问题得到快速解决。如果我需要这些产品中的任何一种的特殊功能,我会充满信心地使用它们。
另一个可能的问题是供应商更新其自己的发布版本以修复某些错误或安全补丁的速度。例如,Oracle已经声明他们保留立即向自己的客户发送任何准备好的补丁的权利,同时将这些补丁提交给OpenJDK项目进行考虑。当然,任何提供商提供商业支持的人都有可能向付费客户提供快速修复或补丁。那些作为社区免费提供的版本可能需要更长时间来更新,很可能在OpenJDK项目合并修复/补丁之后才会更新。
每个供应商都可以自由地修改其代码库,只要他们遵守Java规范。例如,亚马逊的Corretto团队已经对其自己的发布进行了改进,并将这些更改上游共享到OpenJDK项目中。在OpenJDK决定是否采纳这些更改之前,可能会有一段时间间隔。因此,各种发行版可能会有所不同。但是,在这一点上,Java社区中的所有供应商似乎都有真诚的承诺共同努力防止分裂。因此,我在这里并没有真正的担忧,但为了完整起见提到这一点。

1
总结一下:如果你想在一些奇怪的平台上运行你的程序,比如咖啡壶、汽车和冰箱,或者希望保持源代码的隐藏,那么你需要购买开发者许可证。如果你只需要在Windows/Linux/MacOS上运行程序,你可以从jdk.java.net获取开源代码,并在GPL下发布你的程序。暂且不考虑其他选项。这样说对吗? - Tschallacka
6
@Tschallacka 不对,仅仅在调用Java并部署到通用桌面电脑(Mac、PC)和移动设备(iPhone等)上运行Linux/BSD、Linux、macOS、Windows、Android、iOS等操作系统时,并没有要求您将程序发布在GPL下。一定要阅读您获取的任何JVM的许可条款--请注意,Oracle JDK不再允许免费用于生产,但您至少有其他六个可供免费使用。如果从OpenJDK项目复制或修改源代码,则情况就不同了,请阅读条款以适用GPL。 - Basil Bourque
4
请参考OpenJDK项目网站上的“法律文件”页面,具体来说,请查看“GNU通用公共许可证第2版,带有类路径例外”的文档。了解关键的“类路径例外”,这意味着仅运行时链接不会触发共享源代码的GPL义务。 - Basil Bourque
@BasilBourque 如果我使用Oracle JDK进行开发,但在部署到拥有自己JDK实现的AWS上,我是否仍需要支付费用?两种实现之间是否会出现不兼容问题? - hrzafer
4
我不是律师,你应该自己阅读条款...但是,在我阅读的条款中,只要在部署到其他JVM时开发使用Oracle JDK,就不会有问题。至于不兼容性,任何使用“Java”商标的版本必须通过Oracle要求的严格兼容性测试。而且,我所知道的所有当前版本都几乎完全基于OpenJDK代码库,Oracle已经宣布他们有意实现功能平衡。所以,不,我不会担心兼容性问题。 - Basil Bourque
2
@hrzafer 另一个想法:如果部署到由AWS提供的Java,我会将所有开发和测试机器上的JVM切换到Corretto。他们现在正在发布Java 8,并且针对macOS、Linux和MS Windows的Java 11.0.2有一个发行候选版本。 - Basil Bourque

73

目前,似乎没有免费且易用的Oracle支持的Java 11 JRE(仅)选项。以下是您的选择:

  1. 从OpenJDK网站下载并使用OpenJDK Java 11 JDK。

  2. 从Oracle网站下载并使用Oracle Java 11 JDK……并确保您完全理解现在适用于Oracle Java 11+版本的“商业用途”限制。

  3. 尝试从OpenJDK源代码为Windows创建自己的Windows JRE,请参见Create jre from OpenJDK Windows。(我不建议这样做。有更好的替代方案。

  4. 研究使用新的jlink工具为您的应用程序创建定制映像(基本上是削减版JRE)。这似乎是Oracle希望第三方应用程序开发人员使用的选项。

  5. 与Oracle销售人员讨论Java支持合同,并特别询问如何获得JRE版本。 (我不知道答案将是什么。如果有人尝试过并得到积极回应,请在评论中说明!

  6. 使用第三方Java JRE分发。

    • Java供应商列表会随着时间而变化,目前包括AdoptOpenJDK、Amazon、Azul、BellSoft、IBM、jClarity、Red Hat和SAP。另请参见:OpenJDK和Adoptium/AdoptOpenJDK之间的区别

    • 其中一些供应商提供JRE发行版,请检查它们的下载站点。

    • 由于(几乎)所有Java供应商都基于相同的标准OpenJDK代码库构建其产品,这与Oracle Java没有任何稳定性问题。有些供应商提供(付费的)支持。

(或者从Windows切换到Linux。我可以在最新版本的Ubuntu、Fedora等发行版的发行版包管理器中安装OpenJDK Java 11 JRE-only包)


对于那些认为Oracle Java 11和OpenJDK Java 11是一样的人,请阅读来自Oracle下载网站的以下内容:

Oracle JDK 11许可证的重要变更

随着JDK 11的推出,Oracle已经更新了我们提供Oracle JDK的许可条款。新的 Oracle Java SE的技术网络许可协议 与之前的JDK版本提供的许可证明显不同。请在下载和使用此产品之前仔细阅读新条款。

请注意 Oracle 表示 Oracle Java 和 OpenJDK Java 的许可证是不同的。即使两者基本上是从相同的源代码库构建而来,也不能忽视这一点!此软件亦可在 jdk.java.net/11 上以GPL许可证提供。


2
我想补充一下,有些第三方JDK发行版非常稳定且经过良好验证。例如,AdoptOpenJDK已存在很长时间,并得到了亚马逊、Azul、IBM、Microsoft和Red Hat的支持。它可以被认为几乎与Oracle自己的发行版一样官方。 - Lii
@Lii - 请参见上述选项#6。 - Stephen C
是的,我知道,我的评论并不是为了纠正你在那一部分写的内容,而是提供关于它的额外信息。 - Lii

5

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接