jakarta-ee - 使用 /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 插件。
解决方案
简而言之,你可以。
从 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 来完成这个。
推荐阅读
- r - 如何在 R 中创建变量来计算另一个变量的一个变量的值的数量?
- angular - 单独渲染元素中的 Micro UI Angular 问题
- android - Spinner 在片段中添加/获取价值
- amazon-web-services - AWS CLI 创建 ECR 存储库
- c# - 使用开箱即用的 WPF DataGrid 显示预处理的动态数据
- mysql - 无法在mysql表中插入主键
- r - 有没有办法让 for 循环运行这样的命令?
- asp.net-core - 添加分页“IQueryable 未实现 IAsyncQueryProvider”时出现以下错误
- android - 如何从 MultiChoiceModeListener 中的 onItemCheckedStateChanged 到达列表视图中的行项目
- c# - 打破格式和字符串提供到字符串数组列表中