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

打包时排除配置文件,核心是控制 resources 的复制行为和 jar 的归档内容,不是简单删掉文件,而是让 Maven 在构建流程中跳过它们。
在 resources 阶段就过滤掉
这是最常用也最稳妥的方式。Maven 默认把 src/main/resources 下所有文件都当作资源处理,但你可以显式指定哪些目录或文件不参与复制。
- 在
pom.xml的<build><resources>中,用<excludes>排除特定路径或后缀 - 例如只保留公共配置,排除各环境专用文件:
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application-dev.yml</exclude>
<exclude>application-test.yml</exclude>
<exclude>application-prod.yml</exclude>
</excludes>
</resource>
</resources>
用 maven-jar-plugin 控制最终 jar 包内容
即使资源被复制进 target/classes,你仍可在打 jar 包时剔除。适合已存在多套配置、又不想改动 resource 结构的场景。
- 添加
maven-jar-plugin插件,并在<configuration>中配置<excludes> - 支持通配符,比如排除整个 config 目录或所有 yml 文件:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<excludes>
<exclude>**/config/**</exclude>
<exclude>**/*.yml</exclude>
</excludes>
</configuration>
</plugin>
配合 profile 实现按需包含
更推荐的做法:不靠“排除”,而靠“只包含当前环境需要的”。通过 Maven profile 激活不同资源配置集。
- 把各环境配置放在独立子目录(如
src/main/resources/dev/、src/main/resources/prod/) - 在
pom.xml中定义 profile,每个 profile 只 include 对应目录:
<id>prod</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.yml</include>
<include>prod/**</include>
</includes>
</resource>
</resources>
</build>
</profile>
打包时执行 mvn package -Pprod,就只会打进 prod 目录下的配置。
注意几个易错点
-
maven-resources-plugin默认已启用,无需额外声明;重点是改它的<resources>配置 - Spring Boot 项目若用了
spring-boot-maven-plugin,它默认会把resources全部打进 jar —— 所以必须配合上面任一方式干预 - 排除后务必验证:解压生成的 jar,检查
BOOT-INF/classes/下是否真没那些文件 - 如果用了 filtering(如
<filtering>true</filtering>),确保 exclude 规则写在 filtering 启用的 resource 块里,否则可能失效


















