使用 maven-war-plugin 的 packagingExcludes 移除不想打进包的文件

在标准的 maven 项目中,配置文件、资源文件等都是放到 resources 目录下的。这个目录中的文件打包时会打到 classes 目录下作为配置文件。

但是在有些项目中,resources目录下有些文件是不想打进 WAR 包的。

比如:在使用 Springboot 开发项目时,application.propertiesapplication-dev.properties等文件不想打进 WAR 包,这些文件会通过另外的方式移交到服务器上。

有些人会使用 resources 的 excludes 方式,也是可以达到效果的,配置如:

1
2
3
4
5
6
7
8
9
10
11
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 不打进 WAR 包的文件 -->
<excludes>
<exclude>application.properties</exclude>
<exclude>application-dev.properties</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>

但是:这种方式会导致将项目导进 Eclipse 中,Eclipse 也识别到了,在 Eclipse 本地编译时也会去掉这些文件,但是这些文件在本地运行又是需要的。当然可以在 Eclipse 中配置强制 ExcludedNone,但是毕竟每个开发的电脑上都要配置,比较麻烦。

使用:maven-war-pluginpackagingExcludes

还有一种方式就是在 maven-war-plugin 中配置packagingExcludes,如:

1
2
3
4
5
6
7
8
9
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 配置一些不打进 WAR 包的文件。 -->
<packagingExcludes>**/application.properties,**/application-dev.properties</packagingExcludes>
</configuration>
</plugin>

使用 packagingExcludes 只是告诉 maven,这些文件不打进 WAR 包,编译还是包括的。

使用时需要注意:

  1. 多个文件使用逗号分隔,可以使用 * 做通配符。

  2. 文件目录是根据包来的,所以要搞清楚需要移除的文件是在哪个目录下。比如:WEB-INF/classes/application.properties

参考文章

https://stackoverflow.com/questions/30413825/maven-exclude-resource-from-war