起的作用是根据不同的环境条件更改pom文件
profiles可以包含不同的配置,在build时修改pom.xml,例如开发环境,测试环境,生产环境
明确的命令行,maven settings,Environment specific,os settings,present or missing files 均可触发某些profile
profile中可以用pom元素的一个子集,再加一个额外的元素。可以定义在pom.xml中,可以定义在%USER_HOME%/.m2/settings.xml中,可以定义在${maven.home}/conf/settings.xml中
profile的触发
-P 参数可以触发,以逗号分割
mvn install -P profile-1,profile-2
mvn groupId:artifactId:goal -P profile-1,profile-2
//下面这两个不会被触发
mvn install -P !profile-1,!profile-2
-P 命令执行时activation configuration和 <activeProfiles>中的一并会触发
通过settings.xml中的profiles节点和activeProfiles来触发,每个包含一个profile id
<settings>
...
<activeProfiles>
<activeProfile>profile-1</activeProfile>
<activeProfile>profile-2</activeProfile>
</activeProfiles>
...
</settings>
通过profile元素节点的<activation> section 来激活。 可以根据jdk版本,system属性的存在,或者属性的特定值.
<profile>
<activation>
<jdk>1.4</jdk> //jdk1.4 才匹配
可加开闭区间匹配
</activation>
...
</profile>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
//当debug 有值时,无论是何值均激活
<activation>
<property>
<name>debug</name>
</property>
</activation>
//未设置debug
<activation>
<property>
<name>!debug</name>
</property>
</activation>
//未定义,或者定义了一个不是true的值
mvn groupId:artifactId:goal
mvn groupId:artifactId:goal -Ddebug=false
<activation>
<property>
<name>debug</name>
<value>!true</value>
</property>
</activation>
从maven3.0开始,pom中的profiles可以被 settings.xml中的active profiles中的properties 定义的system property 激活
profile可以更改的内容
在settings.xml中的profile仅可以更改 <repositories> 和<pluginRepositories> 节点和<properties>节点
可以在pom中以${profile.provided.path} 来引用provided profile中的path变量的值
pom 可以更改的值
<repositories>
<pluginRepositories>
<dependencies>
<plugins>
<properties> (not actually available in the main POM, but used behind the scenes)
<modules>
<reporting>
<dependencyManagement>
<distributionManagement>
a subset of the <build> element, which consists of:
<defaultGoal>
<resources>
<testResources>
<finalName>
发现激活的profile
mvn help:active-profiles
mvn help:active-profiles -Denv=dev
mvn help:active-profiles -P appserverConfig-dev
mvn help:effective-pom -P appserverConfig-dev
profile 依环境选择配置
<profile>
<id>development</id>
<properties>
<profiles.active>development</profiles.active>
<deploy.url>http://host:port/manager/text</deploy.url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
测试环境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<deploy.url>http://host:port/manager/text</deploy.url>
</properties>
</profile>
<profile>
生产环境 -->
<id>production</id>
<properties>
<profiles.active>production</profiles.active>
<deploy.url>http://host:port/manager/text</deploy.url>
</properties>
</profile>
针对不同的环境,我们定义不同的配置文件,而这些配置文件都做为资源文件放到maven工程的resources目录下,即src/main/resources目录下,且各个环境的配置分别放到相应的目录下,而所有环境都公用的配置,直接放到src/main/resources/base目录下
<build>
....
<resources>
<resource>
<directory>src/main/resources/${conf-dir}</directory>
</resource>
<resource>
<directory>src/main/resources/base</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/main/resources/${conf-dir}</directory>
</testResource>
<testResource>
<directory>src/main/resources/base</directory>
</testResource>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
配置tomcat-maven-plugin插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.2-SNAPSHOT</version>
<configuration>
<url>${deploy.url}</url>
<server>tomcat</server>
<path>/appcontext</path>
</configuration>
</plugin>
mvn clean package -Pproduction即构建出生产环境需要的war包
mvn tomcat:redeploy -Ptest 即发布到测试环境