关于maven resource plugin中的filter的理解

我的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文件本身并没变化。

阅读 4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题