Java 7应用服务器,特别是Servlet3.1容器,应该允许我们部署包含web应用程序的WAR文件。WAR文件本质上是一个具有部署描述符(web.xml)和其他几个元素的JAR。
另一方面,Java9引入了模块化JAR文件的概念,即带有模块描述符(module-info.class)的JAR,该JAR根据项目Jigsaw创建了一个模块。
那么,WAR文件也能包含一个模块描述符并生成一个“模块化WAR文件”吗?
是否已经有能够接受部署“模块化WAR文件”的应用服务器?
一般来说,在Java 9模块化方面,servlet容器和WAR文件的未来是什么?
发布于 2017-10-24 09:40:04
目前,Java和java 9(拼图)模块之间没有链接。未来的Java版本可能会引入规范定义的行为,说明如何与jigsaw模块交互。
此时,当运行在JDK9上时,所有应用服务器都以“类路径模式”运行,这实际上意味着它们不使用拼图。
在大多数情况下,在war部署中引入模块信息只会导致部署问题,因为JDK可能尝试以与应用服务器其他部分不同的方式加载它。或者,它甚至不能产生影响,因为大多数应用服务器都有加载jars &类的自定义逻辑。
今天,一些应用服务器已经实现了某种模块化,比如OSGi(GlassFish,Some )或jboss (Wildfly),但在这个时候,jigsaw仍然有一些限制,无法在其之上运行这样的模块化系统。
因此,总之,除非有EE规范(可能是9+)被更新以描述EE部署应该如何在启用jigsaw的运行时上运行,否则这种部署的行为没有“正式”的方式。在此之前,每个应用服务器都可以实现对它的一些自定义支持,但它并不是标准的。
发布于 2017-09-30 03:46:47
因此,WAR文件也能包含一个模块描述符并生成一个“模块化WAR文件”吗?
是的,它可以。因为它现在基本上可以是http://openjdk.java.net/projects/jigsaw/spec/sotms/#module-artifacts,具有像web.xml这样的部署描述符。
一般认为servlet容器和WAR文件在Java9模块化方面的未来是什么?
从模块系统的动态配置方面来看,
特别是对于Java平台,目标是启用未来的模块化war文件标准,其中war文件中的组件可以是开发人员模块。
已经有能够接受部署“模块化WAR文件”的应用服务器了吗?
虽然我目前还不知道有任何这样的现有工具或服务器,但是创建模块罐的功能已经添加到JMOD和JAR工具中,它们提供了应用服务器和模块系统集成的未来视图。
https://stackoverflow.com/questions/46497172
复制相似问题