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

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

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

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

相关推荐
跨境数据猎手3 小时前
京东开放平台商品详情接口(jd.item_get):签名、缓存与批量采集
java·spring·缓存
霸道流氓气质5 小时前
Spring AI提示词模板与动态变量替换
java·python·spring
Whyn5 小时前
Servlet 学习笔记
spring
ofoxcoding5 小时前
Claude Fable 5.1 API 接入指南:模型标识、五级定价策略、effort 参数与缓存 TTL 配置详解
java·spring·缓存·ai
摇滚侠7 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 Spring Framework 的事务管理 阅读笔记 34
spring boot·笔记·spring
武哥聊编程7 小时前
【AI实战项目】基于LangChain4j+Springboot+Vue+RAG+PGVector的AI智能客服与工单处理系统
springboot·rag·pgvector·langchain4j
小宇宙清歡渡7 小时前
Java Stream 流全面实战指南(Spring Boot 3 + JDK 17)
java·springboot·stream流
霸道流氓气质10 小时前
Spring AI异常处理与重试机制
java·人工智能·spring
小江的记录本16 小时前
【CSS】CSS 动画:transition、animation、transform、CSS3 新特性(附《思维导图》)
前端·css·安全·spring·前端框架·css3·动画
宸津-代码粉碎机17 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring