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文件的未来是什么?
答案 0 :(得分:11)
目前,Java EE和Java 9(jigsaw)模块之间没有链接。 未来的Java EE版本可能会引入有关如何与jigsaw模块交互的规范定义行为。
此时所有应用服务器在JDK9上运行时都以“类路径模式”运行,这实际上意味着他们不使用拼图。
在大多数情况下,将war-deploy引入module-info只会导致部署问题,因为JDK可能会尝试以与应用服务器的其他部分不同的方式加载它。或者它甚至无法发挥作用,因为大多数应用程序服务器都有自定义逻辑来加载jar和&类。
今天的一些应用服务器已经实现了某种模块化,如OSGi(GlassFish,Liberty)或jboss-modules(Wildfly) 但此时拼图仍然有一些局限性,无法在其上运行此类模块化系统。
简而言之,直到EE规范(可能是9+)被更新以描述EE部署应如何在启用jigsaw的运行时上运行,对于此类部署的行为方式没有“官方”方式。 在此之前,每个应用服务器都可以为它实现一些自定义支持,但它不会是标准的。
答案 1 :(得分:3)
因此,WAR文件是否也包含模块描述符并制作“模块化WAR文件”
是的,它可以。因为它现在基本上可以Modular JAR file使用web.xml
等部署描述符。
一般来说,Java 9模块化方面的servlet容器和WAR文件的未来是什么?
从模块系统的Dynamic configuration方面,
特别是对于Java EE平台,目标是启用a 未来的模块化war-file标准,其中war文件中的组件 可以是开发人员模块。
是否已有应用服务器能够接受部署“模块化WAR文件”?
虽然我目前还没有意识到任何此类现有工具或服务器,但JMOD
和JAR
工具已添加create Modular Jar功能,可提供未来视图的集成。应用服务器和模块系统。