Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
引入该模块系统后,Java9及以上版本是否仍与平台无关?_Java_Java 9_Java 10_Java 11 - Fatal编程技术网

引入该模块系统后,Java9及以上版本是否仍与平台无关?

引入该模块系统后,Java9及以上版本是否仍与平台无关?,java,java-9,java-10,java-11,Java,Java 9,Java 10,Java 11,我不能理解在我们的java语言中引入模块系统之后。java9及以上版本是否仍与平台无关?我问这个问题是因为我读到现在每个应用程序都有自己的jre。那么,这个jre将如何在所有操作系统(如windows、Linux或Mac操作系统)上运行。您正在将Java平台最近所做的两个不同更改混为一谈: Java Web Start和Applet技术的退役 模块化 退役的桌面技术 最近,甲骨文宣布,除此之外,还将逐步淘汰这些技术。请参阅Java 9发行说明中的项目: Java部署技术已被弃用,并将在未来版

我不能理解在我们的java语言中引入模块系统之后。java9及以上版本是否仍与平台无关?我问这个问题是因为我读到现在每个应用程序都有自己的jre。那么,这个jre将如何在所有操作系统(如windows、Linux或Mac操作系统)上运行。

您正在将Java平台最近所做的两个不同更改混为一谈:

  • Java Web Start和Applet技术的退役
  • 模块化
退役的桌面技术 最近,甲骨文宣布,除此之外,还将逐步淘汰这些技术。请参阅Java 9发行说明中的项目:

Java部署技术已被弃用,并将在未来版本中删除

Java小程序和WebStart功能,包括小程序API、Java插件、Java小程序查看器、JNLP和Java Web Start,包括javaws工具,在JDK 9中都不推荐使用,并将在将来的版本中删除

最终用户将不再被鼓励在他们的计算机上安装JDK或JRE

有关更多详细信息,请参阅Oracle发布的8页2018-03白皮书

那么,开发人员或应用程序如何向最终用户交付他们的软件呢

Oracle建议将您的应用程序与&for delivery打包为一个单一的可启动应用程序,在客户端上显示为与本机应用程序一起的另一个应用程序。自Java诞生以来,这种“可双击”的应用程序打包通常在Mac上完成。但在其他主机环境(、等)上曾经是一门晦涩难懂的艺术,现在将成为规范,就像在macOS上一样

在过去,将Java运行时与应用捆绑在一起需要跨越一些障碍。随着开源项目的到来,以及可能的其他实现†的到来,这些法律性已经放松

您需要为每个托管环境准备不同版本的应用程序。虽然Java代码独立于主机操作系统运行,但JVM是由本机代码构建的,用于与特定类型的主机进行交互。因此,您需要使用Linux JVM构建Linux版本,使用macOS JVM构建macOS版本,等等。虽然这看起来像是一个令人沮丧的问题,但好处是您不再需要担心用户安装了错误的JVM版本,或者根本没有JVM。现在JVM的存在和版本在您的控制之下。您的最终用户和客户将不再需要知道您的应用程序是基于Java的

模块化 对应用程序打包的需求和应用程序无关。正如我所说,在Mac上已经做了几十年了

模块化带来的好处是,您捆绑到交付的应用程序中的JVM/JRE可以定制为只包含特定应用程序实际使用的Java模块。这将导致更小的大小,因此您完成的应用程序更小,下载速度更快,使用的存储空间更少,并且您的应用程序加载速度更快

开源的“Java链接器”工具有助于打包工作,因此您可以将一组模块及其依赖项(仅应用程序实际调用的模块)组装并优化为自定义运行时映像。此模块化运行时图像格式在中定义


†在相关说明中,您可能希望阅读白皮书,了解如何以及在何处获得应用程序的Java实现,以及免费或付费版本中可能提供或不提供的支持


顺便说一下,您可能会在上找到一些有用的信息,其中包括选择Java实现的各种源的流程图。

模块系统通常不会影响Java的操作系统独立性。使用模块系统的Java应用程序需要在JRE中运行。这可以是一个特定于操作系统的预装JRE,也可以是一个定制的运行时映像(嵌入应用程序的JRE)

模块系统的主要目的是为您提供一种管理方式,将应用程序拆分为不同的逻辑模块。例如,可以加载到不同的.jar文件中,这些文件可以在运行时加载-无论在哪个操作系统上

总之,您有以下选项:

  • 确保您的客户端预装了正确的JRE。这可能很危险,因为(通常)您无法控制他的更新行为

  • 将您的应用程序与官方JRE一起发布

  • 使用JLink定制您自己的、特定于应用程序和操作系统的运行时映像。将其与您的应用程序捆绑发货

    但是,假设我不知道我的客户机将运行什么操作系统,那么如何运行呢 服务器将决定他应该给他什么样的图像。i、 例如,苹果 映像、Linux映像或Windows exe

    您必须了解目标操作系统并提供正确的运行时映像

java9及以上版本是否仍与平台无关

对。它一如既往地独立于平台。模块系统与平台独立性无关

现在每个应用程序都有自己的jre

不必这样做,但随着时间的推移,越来越多的人推荐这样做,因为在他们的系统上单独安装Java的人越来越少。这曾经是一个既定的数字,但在过去十年左右,这个数字一直在下降,现在(Java开发人员之外)几乎没有人安装独立的JRE

这个jre如何在所有操作系统上运行


不会的。您将为要分发的每个平台绑定一个单独的JRE。但适用于所有平台的JRE仍然是免费的,同样的Java代码仍将在适用于任何平台的JRE上运行。

虽然Java 9使JRE更容易发布,它更紧凑,更适合于单个应用程序的需要,但您不必这样做。如果你是alrea