You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven构建未复制全部资源文件 新增后缀资源未输出到target目录

问题根因

现有配置和操作存在3个直接导致资源复制失败的问题,另有1个配置隐患:

  • 资源匹配规则错误:<include>标签内的*.后缀是单级通配符,仅能匹配src/main/resources目录第一层的文件,无法识别子目录内的同后缀文件
  • 构建缓存未清理:IDE内的「Update Maven Project」仅同步依赖和配置,不会清空历史构建产物,新增的匹配规则不会触发全量资源复制
  • 输出路径配置不符合常规逻辑:<targetPath>../</targetPath>会将资源输出到target/classes的上两级(即项目根目录,和target文件夹同级),很容易出现找错输出位置的情况
  • 配置隐患:maven-jar-plugin中重复定义了两次classpathPrefix,后写入的./lib/会覆盖前序的../lib/配置,运行时会出现依赖找不到的问题
修复步骤
  1. 替换<build>标签下的resources配置块,改用多级通配符匹配所有层级的文件,无特殊需求不要自定义targetPath,资源会默认输出到target/classes路径,打包时自动归入类路径:
<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
            <!-- ** 表示匹配任意层级的目录,覆盖根目录和所有子文件夹下的对应后缀文件 -->
            <include>**/*.properties</include>
            <include>**/*.bat</include>
            <include>**/*.xml</include>
            <include>**/*.sh</include>
            <include>**/*.txt</include>
            <include>**/*.sql</include>
        </includes>
    </resource>
</resources>

如果你确实需要把资源输出到项目根目录和target文件夹同级,可以在<resource>标签内加回<targetPath>../</targetPath>配置。

  1. 修正maven-jar-plugin的重复配置,删除重复的<classpathPrefix>../lib/</classpathPrefix>行,仅保留一个有效的类路径前缀配置。
  2. 执行Maven清理命令清除旧构建缓存,不要仅依赖IDE的更新功能:
    mvn clean
  3. 清理完成后执行mvn compile或者重新触发项目构建,即可在对应输出目录看到所有后缀的资源文件。
补充说明

如果需要保留.sh脚本的可执行权限、或者出现资源文件乱码问题,可以额外配置maven-resources-plugin指定文件编码和权限规则,无特殊需求无需额外配置。

内容的提问来源于stack exchange,提问作者haosmark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:06:40