由于没有更多的JRE 11可供下载,我如何让Java 11运行时环境工作?兼容性问题
Java 11没有附带JRE以供下载,这与过去的Java版本不同。我在运行一些基于Java的软件时收到错误“没有Java运行时环境”。为了解决这个问题,我不得不安装Java 8 JRE。
鉴于没有更多的JRE 11可供下载,我如何让我的PC运行Java 11 JRE?
我使用的是 Windows 10。
Java 11没有附带JRE以供下载,这与过去的Java版本不同。我在运行一些基于Java的软件时收到错误“没有Java运行时环境”。为了解决这个问题,我不得不安装Java 8 JRE。
鉴于没有更多的JRE 11可供下载,我如何让我的PC运行Java 11 JRE?
我使用的是 Windows 10。
目前,似乎没有免费+简单的Oracle支持的Java 11 JRE(仅)选项。您的选项包括:
从 OpenJDK 站点下载并使用 OpenJDK Java 11 JDK。
从Oracle站点下载并使用Oracle Java 11 JDK...并确保您完全了解现在适用于Oracle Java 11 +版本的“商业用途”限制。
尝试从OpenJDK源代码中推出自己的Windows JRE for Windows;请参阅从 OpenJDK Windows 创建 jre。(我不建议这样做。有更好的选择。)
考虑使用新的 jlink 工具为您的应用程序创建自定义映像(基本上是一个向下的 JRE)。这似乎是Oracle希望第三方应用程序开发人员使用的选项。
与 Oracle 销售人员讨论 Java 支持合同,并专门询问如何构建 JRE。(我不知道答案会是什么。如果有人尝试这样做,并且他们得到了积极的回应,请发表评论!)
使用第三方 Java JRE 发行版。
Java供应商的列表随着时间的推移而变化,但截至目前,它包括AdoptOpenJDK,Amazon,Azul,BellSoft,IBM,jClarity,Red Hat和SAP。另请参阅:OpenJDK 和 Adoptium/AdoptOpenJDK 之间的区别
其中一些供应商提供JRE发行版。检查他们的下载站点。
由于(几乎)所有Java供应商的产品都基于与Oracle Java相同的标准OpenJDK代码库,因此没有理由担心第三方JRE的稳定性。一些供应商提供(付费)支持。
(或者从Windows切换到Linux。我可以在最新版本的Ubuntu,Fedora,...上从发行版包管理器安装OpenJDK Java 11 JRE专用软件包。
对于那些认为Oracle Java 11和OpenJDK Java 11是相同的人,请从Oracle下载站点阅读以下内容:
甲骨文 JDK 11 许可证中的重要更改
借助 JDK 11,Oracle 更新了我们提供 Oracle JDK 的许可条款。新的Oracle技术网络许可协议与提供以前版本的JDK的许可证有很大不同。在下载和使用此产品之前,请仔细阅读新条款。
Oracle还在GPL许可证下提供此软件 jdk.java.net/11
请注意,Oracle说Oracle Java和OpenJDK Java的许可证是不同的。(尽管这两者是从本质上相同的源代码库构建的。忽略这一点会给您带来危险!
斯蒂芬·C的答案是正确的,也很重要。
Oracle不再打算让最终用户安装JRE或JDK。浏览器中的Java小程序和Java Web Start应用程序交付都正在逐步淘汰,使最终用户不需要JRE。基于Java的应用程序有望捆绑自己的Java实现。唯一有意识地安装JDK的人将是开发人员和服务器端系统管理员。
重要:
了解:
桌面应用程序现在有望捆绑自己的 Java 运行时。上面列出的这些工具可以创建一个非常小的运行时,自定义适合你的特定应用。
这里有一个流程图,可以帮助您在提供Java 11实现的各种供应商中查找和做出决定。
以及一个表,映射可能导致建议的Java供应商的可能动机或注意事项。
在评论中,提出了一个问题,即对不同供应商发布之间的兼容性问题的关注。
首先,要知道OpenJDK项目包括一套称为OpenJDK社区技术兼容性工具包(TCK)的大量测试。供应商可以自由地自我声明他们的发布是否通过了这些测试。这些说法未经验证,并依赖于荣誉系统。在我上面的图表中,我在我认识的几家供应商上勾选了“TCK”:Oracle JDK by Oracle和Zulu by Azul Systems。
上面图表的蓝色桶区域中列出的所有产品几乎都是直接在OpenJDK源代码上构建的。因此,通常,您应该看到几乎相同的兼容性。
您可能会考虑两个值得关注的领域:技术差异和更新/补丁计划。
至于技术差异,使用OpenJDK项目的供应商可以附带HotSpot引擎或OpenJ9引擎。这些在性能上会有所不同(更快/更慢的启动与整体速度,更多/更少的内存),但它们在遵守Java规范方面的行为应该是相同的。它们可能会有所不同,当然,任何一个都可能存在另一个缺失的缺陷(可能很快就会修复)。就我个人而言,我不会对此感到担忧,但我提到它是为了完整性。
另一个技术差异是Azul Systems的Zing和Oracle的GraalVM使用的不同类型的JVM。其中任何一种都可能以某种方式彼此或与其他产品不同,因为它们有意具有不同类型的JVM实现,以提供特殊功能。但考虑到Java规范的彻底性,它们不应该不兼容。如果是,则可以期望任何兼容性问题都能得到快速解决。如果我需要这些产品的特殊功能,我会充满信心地使用它们。
另一个可能的问题是供应商使用某些错误修复或安全补丁更新自己的版本的速度。例如,Oracle表示,他们保留立即将任何现成的补丁交付给自己的客户的权利,同时将这些补丁提交给OpenJDK项目供考虑。当然,任何提供商业支持的供应商都可能急于向付费客户提供修复或补丁。那些出于对社区的礼貌而免费构建的版本可能需要更长的时间来更新,这可能是在OpenJDK项目包含修复/补丁之后。
每个供应商都可以随意修改他们的代码库,只要他们符合Java规范。例如,亚马逊的Corretto团队已经对自己的版本进行了改进,然后将这些更改分享到OpenJDK项目的上游。在OpenJDK合并这些更改之前,如果他们决定这样做,可能会有时间上的差距。因此,各种版本可能会有所不同。但在这一点上,Java社区中的所有供应商似乎都有真诚的承诺,共同努力防止碎片化。所以,再一次,我在这里没有真正的担忧,但为了完整起见,请提到这一点。