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

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

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

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

相关推荐
哆啦A梦15883 小时前
统一返回包装类 Result和异常处理
java·前端·后端·springboot
zb200641204 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
RuoyiOffice4 小时前
SpringBoot+Vue3+Uniapp实现PC+APP双端考勤打卡设计:GPS围栏/内网双模打卡、节假日方案、定时预生成——附数据结构和核心源码讲解
java·spring·小程序·uni-app·vue·产品运营·ruoyi
不吃香菜学java5 小时前
苍穹外卖-新增套餐
java·spring boot·spring·tomcat·maven·mybatis
赵丙双5 小时前
Server-sent events (SSE)
spring·sse·sseemitter
tuokuac6 小时前
Spring 最核心的注解@Bean本质
java·后端·spring
Lyyaoo.6 小时前
Spring中的拦截器
java·后端·spring
wuqingshun3141596 小时前
说说你对spring的IOC的理解
java·后端·spring