核心是控制resources复制与jar归档内容,非简单删除文件;常用方式是在pom.xml的中用过滤,或用maven-jar-plugin在打包阶段剔除,更推荐通过profile按需指定环境配置。

打包时排除配置文件,核心是控制 resources 的复制行为和 jar 的归档内容,不是简单删掉文件,而是让 Maven 在构建流程中跳过它们。
在 resources 阶段就过滤掉
这是最常用也最稳妥的方式。Maven 默认把 src/main/resources 下所有文件都当作资源处理,但你可以显式指定哪些目录或文件不参与复制。
- 在
pom.xml的<build><resources></resources></build>中,用<excludes></excludes>排除特定路径或后缀 - 例如只保留公共配置,排除各环境专用文件:
用 maven-jar-plugin 控制最终 jar 包内容
即使资源被复制进 target/classes,你仍可在打 jar 包时剔除。适合已存在多套配置、又不想改动 resource 结构的场景。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 添加
maven-jar-plugin插件,并在<configuration></configuration>中配置<excludes></excludes> - 支持通配符,比如排除整个 config 目录或所有 yml 文件:
配合 profile 实现按需包含
更推荐的做法:不靠“排除”,而靠“只包含当前环境需要的”。通过 Maven profile 激活不同资源配置集。
- 把各环境配置放在独立子目录(如
src/main/resources/dev/、src/main/resources/prod/) - 在
pom.xml中定义 profile,每个 profile 只 include 对应目录:
打包时执行 mvn package -Pprod,就只会打进 prod 目录下的配置。
注意几个易错点
-
maven-resources-plugin默认已启用,无需额外声明;重点是改它的<resources></resources>配置 - Spring Boot 项目若用了
spring-boot-maven-plugin,它默认会把resources全部打进 jar —— 所以必须配合上面任一方式干预 - 排除后务必验证:解压生成的 jar,检查
BOOT-INF/classes/下是否真没那些文件 - 如果用了 filtering(如
<filtering>true</filtering>),确保 exclude 规则写在 filtering 启用的 resource 块里,否则可能失效










