我的pom文件中,配置如下
<profiles>
<profile>
<id>office</id>
<properties>
<profileActive>office</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
...
</profiles>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>application.properties</exclude>
<exclude>application-home.properties</exclude>
<exclude>application-office.properties</exclude>
<exclude>application-prod.properties</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.properties</include>
<include>application-${profileActive}.properties</include>
</includes>
</resource>
</resources>
</build>
我的理解是,上述配置会让target打包的结果资源文件中包含两个文件,一个是application.properties,一个是application-${profileActive}.properties,这里因为active profile是prod,所以就是application-prod.properties。上述配置是先将所有的application.properties文件排除exclude出打包结果,然后再include加进来两个application.properties文件。
但是看了一些文章,好像这个filter是对文件的内容中的键值对进行替换,而不是打包包不包含哪个资源文件。这和我上面的理解不一致,但是我的理解却符合结果。这是怎么回事?
而且奇怪的是,第二个filtering是false的时候,application-${profileActive}.properties的值运行时不能覆盖掉application.properties里的值,而true的时候,运行时能。 不过打包结果中application.properties文件本身并没变化。