java - Java 9 也适用于 WAR 文件吗?

标签 java servlets 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 文件”部署的应用服务器?

总的来说,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/

相关文章:

javax.imageio - Java 9 ImageIO read\write 给出了与 Java 8 不同的结果

java 9 : In module-info. java 我必须再次提及已经在源中导入的包((根据需要)

java - 在 openBravo 中同时连接到多个数据库?

java - 具有多个缓存提供程序的 JCache?

java - 将数据库数据发送到设定的html页面

java - org.apache.catalina.LifecycleException : Failed to start component [StandardEngine[Catalina]. StandardHost[localhost].StandardContext[/CollegeWebsite]]

java - 如何使用 Jsonb 将 JSON 中的数值数组解析为 Java 对象

java - JTable setValueAt StackOverflowError

java - 如何读取非 servlet java 文件中的上下文参数/web.xml 值?