首页 > 解决方案 > 使用 /META-INF/resources 时,WEB-INF 去哪里了?

问题描述

我将所有网络资源放入/META-INF/resources.

但是web.xml内部WEB-INF/呢?我必须src/main/webapp/把它放在里面还是我也可以把它放在下面src/main/resources/

如果是这样,我必须把它放在哪里?src/main/resources/WEB-INF/还是src/main/resources//META-INF/resources/WEB-INF/

我正在使用 Maven 和 Assembly 插件来构建我的项目,而不是 WAR 插件。

标签: jakarta-ee

解决方案


简而言之,你可以。

从 Servlet 3.0 开始,您可以在常规 jar 文件中的 Web 应用程序之间共享 java 类、Web 资源和web-fragment.xml文件。这些 jar 被称为“web 片段”。

来自 Servlet 3.1 规范的§8.2.1:

...

Web 片段是 Web 应用程序的逻辑分区,这样 Web 应用程序中使用的框架可以定义所有工件,而无需要求开发人员在 web.xml 中编辑或添加信息。它可以包含几乎所有 web.xml 描述符使用的相同元素。然而,描述符的顶级元素必须是 web-fragment,并且相应的描述符文件必须称为 web-fragment.xml。web-fragment.xml 和 web.xml 之间的排序相关元素也不同,请参阅第 14 章部署描述符部分中的 web-fragments 的相应架构。

如果框架被打包为 jar 文件,并且具有部署描述符形式的元数据信息,那么 web-fragment.xml 描述符必须在 jar 文件的 META-INF/ 目录中。

...

因此,无需尝试以某种方式嵌入 web.xml 文件,您只需将相同的内容放在 META-INF/web-fragment.xml 文件中(它共享大部分 web.xml XSD)。

正如您已经发现的那样,您的 Web 资源位于 META-INF/resources 中。

总之,您可以轻松地在普通 jar 文件中构建共享组件。你真的不需要弄乱 maven-assembly-plugin 来完成这个。


推荐阅读