这个问题在这里已有答案:
我们计划将Java 8项目迁移到使用Java 11.但是我注意到Java 11没有JRE文件夹。
在Java 9和Java 10中,文件夹结构被更改,即java\jdk1.x
或java\jre1.x
,其中x
是java 9或10。
但是在Java 11中,我只得到一个文件夹,即java\jdk-11
。如果没有jre,我的客户如何使用我的应用程序?
我所理解的是Java 11正在强制模块化我们的应用程序,并且需要使用jlink来创建我们自己的jre以在客户端中运行应用程序。
我的理解是否正确?
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一样。
哦,剥去任何java * .exe文件的Windows目录树,旧的JRE安装程序的某些版本不会放在那里,以及系统路径也有一些JRE安装程序添加了一些奇怪的条目。
看看AdoptOpenJDK项目网站下载最新的JRE和JDK https://github.com/AdoptOpenJDK/openjdk-jdk11
我已经使用他们的夜间版本来解决JDK包https://adoptopenjdk.net/releases.html?variant=openjdk11#x64_linux中缺少JRE的问题
只需将JRE解压缩到JDK文件夹即可。
如果没有jre,我的客户如何使用我的应用程序?
➥在基于Java的应用程序中捆绑Java实现。
学习关于:
我所理解的是Java 11正在强制模块化我们的应用程序
不,严格来说,不需要模块化。大多数现有应用程序可以在Java 11中按原样运行。您可以继续使用Java 11进行开发,而无需模块化代码。但在您的情况下,对于GUI桌面或移动应用程序,您需要在应用程序中打包JVM。模块化和使用jlink工具可能是最好的方法。相比之下,服务器端基于Servlet的应用程序或微服务服务器还不需要模块化,但最终可能是个好主意。
我注意到Java 11没有JRE文件夹。
Oracle不再希望最终用户安装JRE或JDK。 Java Applets在浏览器和Java Web Start应用程序交付都被逐步淘汰,让最终用户不需要JRE。期望基于Java的应用程序捆绑自己的Java实现。唯一有意识地安装JDK的人将是开发人员和服务器端系统管理员。
有些人对看到Java Everywhere梦想的消失感到失望。他们可能不得不为每个主机操作系统(macOS,Linux,Windows等)构建他们的应用程序。另一方面,一些开发人员很高兴将Java实现(现在比以往更小)与他们的应用程序捆绑在一起,因为这样可以消除最终用户下载 - 安装 - 更新系统范围Java实现的麻烦。还消除了与公司IT部门的摔跤,以在用户的PC上安装Java。将Java与app捆绑在一起可以简化测试和支持,因为您知道并准确控制Java的版本和分发。顺便说一句,这个捆绑式Java-with-app并不是全新的:Apple已经在macOS和iOS应用程序商店中支持了多年。
重要:
这是一个流程图,可以帮助您在提供Java 11实现的各个供应商中查找和决定。