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 打包阶段;如果不存在,说明资源复制阶段就有问题继续检查。

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

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

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

相关推荐
郑洁文5 小时前
旅游景点推荐系统的设计与实现
springboot·毕设·旅游系统·旅游景点推荐系统
云烟成雨TD6 小时前
Spring AI 1.x 系列【42】MCP 服务端 Spring Boot 启动器
java·人工智能·spring
云烟成雨TD6 小时前
Spring AI 1.x 系列【38】模型上下文协议(MCP)
java·人工智能·spring
Alson_Code6 小时前
Spring AI-1.1.0
java·人工智能·后端·spring·ai编程
小小放舟、6 小时前
@JsonCreator 注解详解——从枚举反序列化说起
spring boot·spring·spring cloud·java-ee·maven·intellij-idea·状态模式
摇滚侠8 小时前
Spring 零基础入门到进阶 入门 06-10
java·spring·intellij-idea
總鑽風9 小时前
Spring AI实战:快速集成阿里通义千问
java·后端·spring·ai编程
云烟成雨TD10 小时前
Spring AI 1.x 系列【43】基于标准输入输出 (STDIO) 与服务端推送事件 (SSE) 的 MCP 服务端
java·人工智能·spring
砍材农夫10 小时前
物联网实战:Spring Boot + Netty 搭建 MQTT平台 | 多协议适配与模块化设计
java·spring boot·后端·物联网·spring
云烟成雨TD10 小时前
Spring AI 1.x 系列【41】接入高德 MCP 服务
java·人工智能·spring