Filtering 功能Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(*.properties,*.xml)当中 ${…} 符号的值。比如你系统属性有一项 “user.name=foobar”,那么资源文件当中的 ${user.name} 符号会在 Maven 编译时自动被替换为 “foobar”。
Profile 功能Profile 的作用是允许你在项目文件(pom.xml)里定义若干个 profile 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。
<profiles>
<profile>
<id>online</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<build.profile.id>online</build.profile.id>
</properties>
<build>
<filters>
<filter>profiles/online/config.properties</filter>
</filters>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>jdbc.properties</include>
<include>log4j.properties</include>
<include>system.properties</include>
<include>alarm.properties</include>
</includes>
</resource>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build.profile.id>local</build.profile.id>
</properties>
<build>
<filters>
<filter>profiles/${build.profile.id}/config.properties</filter>
</filters>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>jdbc.properties</include>
<include>log4j.properties</include>
<include>system.properties</include>
<include>alarm.properties</include>
</includes>
</resource>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
在编译项目时,可以使用 -P 参数指定需要使用的 profile 的 id,比如下面命令将会使用
$mvn clean compile -P online
如果想使用 local profile 则执行如下命令:
$mvn clean compile -P online
假如不指定 -P 参数的话,则会使用 activeByDefault=true 的一项(即 local)。