resources路径下的文件无法打入war包或jar包内

目录

前言

问题排查

目录结构不正确

[Maven 默认资源处理被覆盖](#Maven 默认资源处理被覆盖)

打包插件额外排除了文件

建生命周期未执行资源复制

[检查 target/classes 目录](#检查 target/classes 目录)


前言

最近接手一个小项目打包的时候发现了问题,就是xml文件和yml文件都可以在打包的时候被打进war包内,但是html文件是不会打进war包内的。通过pom 的 build resource 的配置如下所示。

复制代码
<resource>
    <directory>src/main/resources</directory>
    <includes>
        <include>**/*.xml</include>
        <include>**/*.yml</include>
        <include>**/*.*</include>
        <include>templates/*.*</include>
    </includes>
    <filtering>false</filtering>
</resource>

问题排查

目录结构不正确

首先检查了目录结构,确保需要复制的文件或目录位于 src/main/resources/xxx下,且xxx里文件确实存在。例如下面结构检查没有错误。

复制代码
src/
  main/
    resources/
      templates/
        index.html

Maven 默认资源处理被覆盖

Maven 默认会将 src/main/resources 下的所有文件复制到 target/classes。但如果你在 <build> 中显式定义了 <resources>,会覆盖默认行为,只包含你指定的 includes。

虽然自定义的 includes 包含了 **/*.*,但需要注意 <include> 是逐个匹配的,如果某个文件没有扩展名(例如 .gitkeep),*.* 不会匹配。所以为了排除干扰,可以简化配置只保留一条,如下所示。我就是这个问题,然后再打包就可以了。

复制代码
<resource>
    <directory>src/main/resources</directory>
    <includes>
        <include>**/*.*</include>
    </includes>
    <filtering>false</filtering>
</resource>

打包插件额外排除了文件

还有一种情况可能是你的项目打包为 war,maven-war-plugin 可能会根据配置排除某些文件。检查 pom.xml 中是否有类似配置,如果有,需要移除或调整排除规则如下图所示。这种情况我不涉及。

复制代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <packagingExcludes>**/templates/**</packagingExcludes>
    </configuration>
</plugin>

建生命周期未执行资源复制

如果依旧未解决,就观察 运行 mvn package 时,Maven 的生命周期包含 process-resources 阶段,该阶段会复制资源。如果你使用了 IDE 的 Build 功能(如 Eclipse 自动编译),可能没有完整执行 Maven 的打包流程,导致资源未复制。建议在命令行执行 mvn clean package,并观察输出中是否有类似提示信息如下所示,如果没有,说明资源未被识别。

复制代码
[INFO] Copying 1 resource

检查 target/classes 目录

最后执行 mvn clean compile 后,查看 target/classes/templates 下是否有 HTML 文件。如果该目录下存在,说明资源已复制,问题可能在 war 打包阶段;如果不存在,说明资源复制阶段就有问题继续检查。

======================================

喜欢请点赞收藏加关注~~~ 好文分享不迷路~~~

======================================

相关推荐
需要82610 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
XIAEE15 小时前
转生到儿童编程异世界:我用 Vue 和 Scratch 建了一座 DREAM 学院
java·spring
XIAEE15 小时前
初次使用 Node + Koa + MongoDB 搭建服务器:从零到第一个 API
java·spring
雷一言说15 小时前
Spring AI 2.0:RAG 文档分块大小策略选择
java·spring
XIAEE15 小时前
Java 世界历险记:从一行 System.out.println 到整个 Spring 宇宙
java·spring
XIAEE15 小时前
微前端狂想曲:我试图让三个不同门派的前端住进同一栋楼
java·spring
XIAEE15 小时前
Linux 生存指南:从"终端恐惧症"到"命令行老司机"
java·spring
XIAEE15 小时前
实战教程:手机端死活调不出摄像头?聊聊安全上下文(Secure Context)
java·spring
XIAEE15 小时前
ES6 与 Node.js 群侠传:那些年我们追过的语法,和那些年把我们追杀的 API
java·spring
XIAEE15 小时前
WebRTC 探险记:我是如何让两个浏览器"看对眼"的
java·spring