結論
mvn pom中,當有多個profile定義了同樣的property。生效的是激活的profile中最後一個proflie裏定義的值。
示例說明
示例pom中,有三個profile都定義了名爲name的property。
這三個profile按順序分別是,Jim、Bob、Alice。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.guyongquan.learn</groupId>
<artifactId>profile-vs-properties</artifactId>
<version>1.0.0</version>
<properties>
<name>world</name>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<goals>
<goal>run</goal>
</goals>
<phase>package</phase>
<configuration>
<target>
<echo message="Hello, ${name}"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>Jim</id>
<properties>
<name>Jim</name>
</properties>
</profile>
<profile>
<id>Bob</id>
<properties>
<name>Bob</name>
</properties>
</profile>
<profile>
<id>Alice</id>
<properties>
<name>Alice</name>
</properties>
</profile>
</profiles>
</project>
沒有激活profile,輸出的是默認的name world
$ mvn package | grep echo
[echo] Hello, world
激活Bob和Jim。因爲Bob的定義再Jim後面,輸出的是Bob。跟激活順序、即-P參數順序無關。
$ mvn package -PBob -PJim | grep echo
[echo] Hello, Bob
$ mvn package -PJim -PBob | grep echo
[echo] Hello, Bob
激活Bob和Alice。Alice定義在後,輸出Alice。
$ mvn package -PBob -PAlice | grep echo
[echo] Hello, Alice