在Java 9和Java 10中,文件夹结构发生了变化,即
java\jdk1.x
或 java\jre1.x
,其中 x
是Java 9或10。但是在Java 11中,我只得到一个文件夹,即
java\jdk-11
。我的客户如何在没有 jre 的情况下使用我的应用程序?我的理解是,Java 11正在强制模块化我们的应用程序,并且需要使用jlink创建我们自己的jre以在客户端运行应用程序。
我的理解正确吗?
java\jdk1.x
或 java\jre1.x
,其中 x
是Java 9或10。java\jdk-11
。我的客户如何在没有 jre 的情况下使用我的应用程序?在过去的20年里,JDK都会附带一个JRE,它只是其功能的一个子集,安装在系统中不同的目录下。
事实上,它附带了两个完全相同的JRE,一个安装在JDK安装目录内部,另一个则在外部。
这一直让我感到困惑,因为维护者这样做完全是在浪费精力,而且在安装在计算机上时,这个JRE只是复制了JDK已经能够完成的一些功能,也就是对硬盘空间的完全浪费。
终于,随着Java 11的到来,Oracle和OpenJDK团队决定结束这种愚蠢行为,仅分发单个东西:JDK。当安装此JDK时,它实际上比旧版JRE的大小还要小,甚至没有了需求将JRE用作具有有限磁盘空间设备的独立运行环境的论据。而这个论据本身并不能解释为什么单个JDK需要安装两个JRE,只是为了证明JRE作为JDK的简化运行环境的必要性。
因此,不再需要独立的JRE,并且很长一段时间以来都没有需要,更不用说将其作为JDK安装的一部分强制安装了。
而且,您不需要创建自己的JRE。只需在客户机上安装OpenJDK,并确保将$JAVA_HOME/bin添加到系统路径中,就像旧版JRE一样。
此外,有些旧版JRE安装程序将java*.exe文件放置在Windows目录树中,因此需要删除它们,还要删除一些JRE安装程序添加的奇怪条目的系统路径。
JRE_HOME
环境变量了吗? - David Ferreira没有jre,我的客户如何使用我的应用程序?
➥ 在你的基于Java的应用程序中捆绑一个Java实现。
了解:
我的理解是Java 11强制我们将应用程序模块化
严格来说,不需要模块化。大多数现有的应用程序可以在Java 11中按原样运行。您可以继续在Java 11中开发而无需模块化代码。但是对于GUI桌面或移动应用程序,您需要在应用程序中打包一个JVM。模块化并使用jlink工具可能是最好的方法。相比之下,服务器端基于Servlet的应用程序或微服务服务器尚不需要模块化,但最好最终这样做。
我注意到Java 11没有JRE文件夹。
欧拉不再打算让最终用户安装JRE或JDK。浏览器中的Java Applets和应用程序交付中的Java Web Start都正在逐步淘汰,使最终用户不再需要JRE。基于Java的应用程序将预计捆绑自己的Java实现。唯一有意识安装JDK的人将是开发人员和服务器端系统管理员。
一些人对“Java Everywhere”的梦想的消失感到失望。他们可能会因为必须为每个主机操作系统(macOS、Linux、Windows等)制作应用程序版本而感到烦恼。另一方面,一些开发人员很高兴能够与他们的应用程序捆绑Java实现(现在比以往任何时候都小),因为这样可以省去最终用户下载-安装-更新系统范围的Java实现的麻烦。也消除了与公司IT部门争论在用户PC上安装Java的问题。并且将Java与应用程序捆绑简化了测试和支持,因为您可以确切地知道和控制涉及的Java版本和分发。顺便说一句,这种应用程序捆绑Java并不是很新:多年来,苹果在macOS和iOS应用商店中一直支持它。
重要:
下面是一个流程图,可以帮助您在各种提供Java 11实现的供应商中进行选择和决策。