每个Profile可以看作是POM的一部分配置,我们可以根据不同的环境应用不同的Profile,从而达到不同环境使用不同的POM配置的目的。
profile可以声明在以下这三个文件中:
-
pom.xml:很显然,这里声明的profile只对当前项目有效
-
用户settings.xml:.m2/settings.xml中的profile对该用户的Maven项目有效
-
全局settings.xml:conf/settings.xml,对本机上所有Maven项目有效
非常值得注意的一点是,profile在pom.xml中可声明的元素在settings.xml中可声明的元素是不一样的:
profile在pom.xml中可声明的元素:
[html] view plaincopy
-
-
<project>
-
<repositories></repositories>
-
<pluginRepositories></pluginRepositories>
-
<distributionManagement></distributionManagement>
-
<dependencies></dependencies>
-
<dependencyManagement></dependencyManagement>
-
<modules></modules>
-
<properties></properties>
-
<reporting></reporting>
-
<build>
-
<plugins></plugins>
-
<defaultGoal></defaultGoal>
-
<resources></resources>
-
<testResources></testResources>
-
<finalName></finalName>
-
</build>
-
</project>
-
-
profile在settings.xml中可声明的元素:
[html] view plaincopy
-
-
<project>
-
<repositories></repositories>
-
<pluginRepositories></pluginRepositories>
-
<properties></properties>
-
</project>
-
激活Profile
有多种激活Profile的方式:
-
命令行方式激活,如有两个profile id为devx和devy的profile:
[plain] view plaincopy
-
-
mvn clean install -Pdevx,devy
-
-
settings文件显式激活
[html] view plaincopy
-
-
<settings>
-
...
-
<activeProfiles>
-
<activeProfile>devx</activeProfile>
-
<activeProfile>devy</activeProfile>
-
</activeProfiles>
-
...
-
</settings>
-
-
系统属性激活,用户可以配置当某系统属性存在或其值等于期望值时激活profile,如:
[html] view plaincopy
-
-
<profiles>
-
<profile>
-
<activation>
-
<property>
-
<name>actProp</name>
-
<value>x</value>
-
</property>
-
</activation>
-
</profile>
-
</profiles>
-
不要忘了,可以在命令行声明系统属性。如:
[plain] view plaincopy
mvn clean install -DactProp=x
-
这其实也是一种从命令行激活profile的方法,而且多个profile完全可以使用同一个系统属性来激活。别忘了,系统属性可以通过mvn help:system来查看
4.操作系统环境激活,如
-
[html] view plaincopy
-
-
<profiles>
-
<profile>
-
<activation>
-
<os>
-
<name>Windows XP</name>
-
<family>Windows</family>
-
<arch>x86</arch>
-
<version>5.1.2600</version>
-
</os>
-
</activation>
-
</profile>
-
</profiles>
这里的family值包括Window、UNIX和Mac等,而其他几项对应系统属性的os.name、os.arch、os.version
5.文件存在与否激活,Maven能根据项目中某个文件存在与否来决定是否激活profile
-
-
[html] view plaincopy
-
-
<profiles>
-
<profile>
-
<activation>
-
<file>
-
<missing>x.properties</missing>
-
<exists>y.properties</exists>
-
</file>
-
</activation>
-
</profile>
-
</profiles>
-
Notice:插件maven-help-plugin提供了一个目标帮助用户了解当前激活的profile:
[plain] view plaincopy
-
mvn help:active-profiles
另外还有一个目标来列出当前所有的profile:
[plain] view plaincopy
-
mvn help:all-profiles
maven profile 与filter集合
<properties>
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
</profiles>
<filters>
<filter>src/main/filters/filter-${env}.properties</filter><!-- 使用filter引入自定义maven属性,不同的profile 引入不同的文件 -->
</filters>