Filtering
Filtering是resource插件的功能,作用是将资源文件中的占位符替换成对应的值,如下图所示:
使用注意
- 启用resource插件的filtering功能;
- 设定资源文件的路径、过滤条件和编码等等;
- 设定属性文件来源(POM定义属性和环境变量直接使用,外部属性文件通过标签指定);
说明:maven-resources-plugin插件的copy-resources功能被绑定到validate阶段,即Lifecycle执行到validate时,资源被拷贝,占位符被替换;
Profile
作用:根据不同的条件**不同的配置;
定义范围:Profile几乎可以定义所有在pom里的定义的内容如、和插件配置等等,如下所示:
<profile>
<id>dev</id>
<properties>
<active.profile>dev</active.profile>
<pom.jdbc.url>jdbc:mysql://127.0.0.1:3306/dev</pom.jdbc.url>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependencies>
</profile>
Profile生效范围
- 如果定义在settings.xml文件中,则是全局的,对所有的maven项目文件都生效;
- 如果定义在pom.xml文件中,则仅对当前项目生效;
Profile**方式
- -P参数
通过maven 的-P参数**指定的profile,参数的值是profile的id,多个profile以逗号分割,如果不想**某个默认的profile,就在它的id前加个!,如下代码:
mvn -U clean package -Ptest,local,!ignore
- <activation>
<profiles>
<profile>
<id>ide</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<module>ide</module>
</properties>
</profile>
<profile>
<id>api</id>
<properties>
<module>api</module>
</properties>
</profile>
</profiles>
Filtering + Profile
思路: 在不同的profile里配置不同的属性(properties),然后**相应的profile,用其中的属性去替换jdbc.properties里的占位符。
<project>
...
<build>
<filters>
<filter>src/main/filters-${active.profile}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<active.profile>dev</active.profile>
</properties>
<!-- 把当前profile设置为默认profile,可以同时这是多个为默认-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<active.profile>test</active.profile>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<active.profile>product</active.profile>
</properties>
</profile>
...
</project>
参考:
- https://maven.apache.org/plugins/maven-resources-plugin/copy-resources-mojo.html;
- https://segmentfault.com/a/1190000003908040;
- https://www.cnblogs.com/0201zcr/p/6262762.html;