2011-09-08 127 views
11

我有兩個Maven配置文件profile-A和profile-B。只有當「A」未被激活時才應激活「B」。 所以,如果我會打電話Maven:只有激活配置文件A,如果配置文件B未被激活?

mvn install 

輪廓-B執行(但不是個人資料-A)。 但是,如果我會打電話

mvn install -Pprofile-A 

然後只執行輪廓-A(但不是個人資料-B)。

任何提示我需要如何寫我的pom.xml來實現這一點?

我已經嘗試過這一點,但它不工作:

<profiles> 
    <profile> 
    <id>profile-A</id> 
    <activation> 
     <activeByDefault>false</activeByDefault> 
    </activation> 
    ... 
    </profile> 

    <profile> 
    <id>profile-B</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
     <property> 
     <name>!profile-A</name> 
     </property>  
     ... 
    </activation> 
    ... 
    </profile> 
</profiles> 

回答

8

我想你的示例命令行按預期方式工作,所有你需要的是<activeByDefault>true</activeByDefault>的輪廓B.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html狀態:

當在命令行中激活POM中的配置文件或通過其激活控制時,默認情況下處於活動狀態的所有配置文件都將自動停用圖。

+0

只是想澄清一個難倒我約15分鐘的觀點。從上面關於'activeByDefault'的鏈接的最新版本(強調我的):「除非在同一個POM中的另一個配置文件**被使用前面描述的方法之一激活,否則該配置文件將自動爲所有構建激活。」在我的情況下,我已經將父級配置文件B添加到父級POM中,並將配置文件A添加到多模塊版本中的葉子POM中。在此配置中,當通過命令行激活配置文件A時,配置文件B未被禁用。將配置文件A和B移動到相同的POM中會產生所需的行爲。 –

相關問題