WAR 9文件的Java 9模块化也是如此吗?

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

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

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

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

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

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

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

在大多数情况下,向war部署引入module-info只会导致部署问题,因为JDK可能会尝试以与应用服务器的其他部分不同的方式加载它。 或者它甚至无法发挥作用,因为大多数应用服务器都有用于加载jar和类的自定义逻辑。

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

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

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

是的,它可以。 因为它现在基本上可以是带有部署描述符(如web.xml Modular JAR文件


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

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

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


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

虽然我目前还没有意识到任何这样的现有工具或服务器,但是已经在JMODJAR工具中添加了创建Modular Jar的function,这些工具提供了应用服务器和模块系统集成的未来视图。