Java 9 是否也适用于 WAR 文件?

2022-09-01 14:43:23

Java EE 7 应用程序服务器,特别是 Servlet 3.1 容器,应该允许我们部署包含 Web 应用程序的 WAR 文件。WAR 文件本质上是一个带有部署描述符 () 和其他几个元素的 JAR。web.xml

另一方面,Java 9引入了模块化JAR文件的概念,即带有模块描述符()的JAR,它根据项目Jigsaw制作模块。module-info.class

那么,WAR文件是否可以同时包含模块描述符并制作“模块化WAR文件”?

是否已经有应用程序服务器能够接受“模块化 WAR 文件”的部署?

一般来说,在Java 9模块化方面,Servlet容器和WAR文件的未来是什么?


答案 1

目前Java EE和java 9(jigsaw)模块之间没有链接。未来的 Java EE 发行版可能会引入有关如何与拼图模块交互的规范定义行为。

此时,所有应用程序服务器在 JDK9 上运行时都以“类路径模式”运行,这实际上意味着它们不使用拼图。

在大多数情况下,将模块信息引入战争部署只会导致部署问题,因为 JDK 可能会尝试以与应用服务器其他部分不同的方式加载它。或者它甚至无法发挥作用,因为大多数应用程序服务器都有用于加载jars和类的自定义逻辑。

今天那里的一些应用程序服务器已经实现了某种模块化,例如OSGi(GlassFish,Liberty)或jboss模块(Wildfly),但是此时jigsaw仍然有一些限制,无法在其上运行这样的模块化系统。

因此,简而言之,在有EE规范(可能是9 +)更新以描述EE部署应如何在启用了jigsaw的运行时上运行之前,没有“官方”方式来说明此类部署的行为方式。在此之前,每个应用服务器都可以为其实现一些自定义支持,但它不会是标准的。


答案 2

因此,WAR文件也可以包含模块描述符并制作“模块化WAR文件”

是的,可以。由于它现在基本上可以是模块化JAR文件,具有部署描述符,例如.web.xml


一般来说,在Java 9模块化方面,Servlet容器和WAR文件的未来是什么?

从模块系统的动态配置方面,

特别是对于 Java EE 平台,目标是实现未来的模块化 war-file 标准,其中 war 文件中的组件可以是开发人员模块。


是否已经有应用程序服务器能够接受“模块化 WAR 文件”的部署?

虽然我目前还不知道任何这样的现有工具或服务器,但是已经添加了创建模块化Jar的功能,并且这些工具提供了应用程序服务器和模块系统集成的未来观点。JMODJAR


推荐