Java 9 模块化也适用于 WAR 文件吗?

Is Java 9 modularity for WAR files as well?

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

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

那么,WAR 文件是否也可以包含模块描述符并生成 "modular WAR file"?

是否已经有能够接受 "modular WAR file" 部署的应用程序服务器?

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

那么,WAR 文件是否也可以包含模块描述符并生成 "modular WAR file"

是的,可以。因为它现在基本上可以是 Modular JAR fileweb.xml.

这样的部署描述符

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

从模块系统的Dynamic configuration方面来说,

For the Java EE Platform, in particular, the goal is to enable a future modular war-file standard in which the components in a war file can be developer modules.


是否已经有能够接受 "modular WAR file" 部署的应用程序服务器?

虽然我目前不知道有任何这样的现有工具或服务器,但是 create Modular Jar 的功能已经添加到 JMODJAR 工具中,它们提供了未来的观点应用服务器和模块系统的集成。

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

此时 运行 在 "classpath mode" 中的所有应用程序服务器 运行 在 JDK9 上运行,这实际上意味着它们不使用拼图。

在大多数情况下,将模块信息引入您的 war 部署只会导致部署问题,因为 JDK 可能会尝试以不同于应用服务器其他部分的方式加载它。或者它甚至不会有所作为,因为大多数应用程序服务器都有用于加载 jar 和 类.

的自定义逻辑

如今一些应用服务器已经实现了某种模块化,例如 OSGi(GlassFish、Liberty)或 jboss-modules(Wildfly) 但是此时jigsaw仍然有一些局限性能够运行这样的模块化系统在它之上。

所以简而言之,直到有更新的 EE 规范(可能是 9+)来描述 EE 部署应该如何 运行 在启用拼图的情况下 运行时间没有 "official"这种部署应该如何表现的方式。 在此之前,每个应用程序服务器都可以为其实现一些自定义支持,但它不会是标准的。