在maven中实现资源的过滤需要结合两个特殊的定义,分别是:profiles和resources, 往往还要结合filters 标签一起使用。
项目中我们往往会编写不同的配置文件,来针对不同的运行环境,如开发、测试、生产环境等。通过定义一系列的配置信息,然后指定其激活条件。通过maven的pom文件,我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。
<profiles> <profile> <id>dev</id> <properties><env>dev</env></properties> <activation>
<!--默认启用的是dev环境配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
<profile>
<id>qa</id>
<properties>
<env>qa</env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>dmz</id>
<properties>
<env>dmz</env>
</properties>
</profile>
</profiles>
resources是指定maven编译资源文件指定到何处的,例如maven的标准资源目录结构是src/main/resources(这个在超级pom中定义到了),maven进行编译时候就会将resources中的资源文件放到web的WEB-INF/classes下.具体如何和资源目录有关系,后面结合的时候后讲到。
pom中定义的resources:
<resources> <resource> <directory>src/main/resources</directory>
<filtering>true</filtering></resource></resources>
filtering设置为true很关键,不然引用不到profiles中的内容。如何通过配置指定编译时的配置文件呢,结合profiles的激活机制能更好的使用filers目录中的内容,pom.xml中的内容如下:
<build><filters>
<filter>src/main/resources/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
Maven为我们提供了一个指令可以查看当前处于激活状态的profile都有哪些,这个指定就是:
mvn help:active-profiles
除了上述的默认的激活方式,还可以使用手动方式激活 :mvn package –P test,编译时就会去找id为test的属性对应的配置文件了。
还可以根据不同的激活条件进行设置:
1、根据jdk环境来激活
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13