Java EE 7 应用服务器,特别是 Servlet 3.1 容器应该允许我们部署包含 Web 应用程序的 WAR 文件。 WAR 文件本质上是一个带有部署描述符 (web.xml
) 和几个其他元素的 JAR。
另一方面,Java 9 引入了模块化 JAR 文件的概念,即带有模块描述符 (module-info.class
) 的 JAR Jigsaw 项目中的模块。
那么,一个 WAR 文件是否也可以包含一个模块描述符并制作一个“模块化 WAR 文件”?
是否已有能够接受“模块化 WAR 文件”部署的应用服务器?
总的来说,servlet 容器和 WAR 文件在 Java 9 模块化方面的 future 是什么?
最佳答案
目前 Java EE 和 java 9(jigsaw) 模块之间没有链接。 future 的 Java EE 版本可能会在如何与拼图模块交互方面引入规范定义的行为。
此时,所有应用服务器在 JDK9 上运行时都以“类路径模式”运行,这实际上意味着它们不使用拼图。
在大多数情况下,将 module-info 引入您的 war 部署只会导致部署问题,因为 JDK 可能会尝试以与应用服务器的其他部分不同的方式加载它。或者它甚至无法产生影响,因为大多数应用服务器都有用于加载 jar 和类的自定义逻辑。
今天的一些应用服务器已经实现了某种模块化,例如 OSGi(GlassFish,Liberty)或 jboss-modules(Wildfly) 但此时 jigsaw 仍然存在一些限制,无法在其上运行这样的模块化系统。
因此,简而言之,在更新 EE 规范(可能是 9+)以描述 EE 部署应如何在启用 jigsaw 的运行时上运行之前,没有“官方”方式来说明此类部署的行为方式。 在此之前,每个应用服务器都可以为其实现一些自定义支持,但它不会是标准的。
关于java - Java 9 也适用于 WAR 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46497172/