maven profile的不同啟用方法
3)Profiles還可以基於detect到的build environment 的state來自動啟用,而不需要象上面2種方式顯式啟用。這隻需要在profile定義時使用<activation> element。如:
<profiles>
<profile>
<activation>
<jdk>1.4</jdk>
</activation>
...
</profile>
</profiles>
上面的程式碼表示:如果JDK version start with 1.4 (eg. "1.4.0_08", "1.4.2_07", "1.4"),該profile會被啟用
<profiles>
<profile>
<activation>
<property>
<name>debug</name>
</property>
</activation>
...
</profile>
</profiles>
上面的程式碼表示:如果存在system propertie “debug”,該profile會被啟用。為了啟用它,輸入的命令類似於:
mvn groupId:artifactId:goal –Ddebug
<profiles>
<profile>
<activation>
<property>
<name>environment</name>
<value>test</value>
</property>
</activation>
...
</profile>
</profiles>
上面的程式碼表示:如果存在system propertie “environment”的值為test,該profile會被啟用。為了啟用它,輸入的命令類似於:
mvn groupId:artifactId:goal -Denvironment=test
4)Profiles還可以基於OS setting來自動啟用
<profiles>
<profile>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
...
</profile>
</profiles>
上面的程式碼表示:如果OS為windows xp,該profile會被啟用
5)根據某個file不存在而啟用profile。例如下面定義的profile是在target/generated-sources/axistools/wsdl2java/org/apache/maven不存在時啟用
<profiles>
<profile>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
</file>
</activation>
...
</profile>
</profiles>
使用Profiles時要注意的2個問題
第一、external properties
不是定義在pom.xml裡的properties都稱為external properties。舉例說明最明瞭:
pom.xml:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.myco.plugins</groupId>
<artifactId>spiffy-integrationTest-plugin</artifactId>
<version>1.0</version>
<configuration>
<appserverHome>${appserver.home}</appserverHome>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
~/.m2/settings.xml
<settings>
...
<profiles>
<profile>
<id>appserverConfig</id>
<properties>
<appserver.home>/path/to/appserver</appserver.home>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>appserverConfig</activeProfile>
</activeProfiles>
...
</settings>