2016-02-10 11 views
7

Aşağıdaki ebeveyn pom.xml dosyası vardır: bir Veli Profilinden Bir Çocuk Profili etkinleştirilmesi

<profile> 
    <id>build_full</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>mymodule_interface</module> 
     <module>mymodule_switch</module> 
     <module>mymodule_switch_simulator</module> 
     <module>mymodule_switch_controller</module> 
     <module>mymodule_server</module> 
    </modules> 
</profile> 

ve mymodule_server için Çocuğum pom içinde

, şu var:

<profile> 
    <id>subprofile</id> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 
<profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 

nasıl, ne zaman maven çağırma: mvn -P build_full, alt modül (mymodule_server) default yerine subprofile profili kullanmak için zorlayabilir miyim?

mvn clean install -Pbuild_full,!default,subprofile 

O (ilgili alt modülde profilini devre dışı bırakmak ve dolayısıyla) herhangi bir profil sahip isim default devre dışı bırakır ve: Senin durumunda

cevap

4

Hayır, bir alt profili bir ana profilden etkinleştiremezsiniz. Daha genel olarak, you can't activate or deactivate any profile from any other profile (bir JIRA özellik isteği var MNG-3309). Yapabilecekleriniz activate two profiles based on the same property. Öncelikle, varsayılan olarak etkinleştirilen bir profili kullanmak genelde iyi bir fikir değildir. İstediğiniz, bir profile (OS sürümü, sistem özelliği ...) dayalı bir profili etkinleştirmektir. Sorununuzu çözmek için, belirli bir sistem özelliği mevcut olduğunda build_full profilini etkinleştirebilir ve aynı özellik mevcut olduğunda subprofile öğesinin de etkinleştirildiğinden emin olun.

fullBuild sistem özelliği true olarak ayarlandığında, her iki profilin de etkinleştirildiği örnek bir yapılandırma aşağıdadır. Maven'i mvn -DfullBuild=true ... ile çağırmak, böylece her iki profili de etkinleştirecektir. Sadece benim cevap göndermeden önce yerel olarak test

<profile> 
    <id>build_full</id> 
    <activation> 
     <property> 
      <name>fullBuild</name> 
      <value>true</value> 
     </property> 
    </activation> 
    <modules> 
     <module>mymodule_interface</module> 
     <module>mymodule_switch</module> 
     <module>mymodule_switch_simulator</module> 
     <module>mymodule_switch_controller</module> 
     <module>mymodule_server</module> 
    </modules> 
</profile> 
<profile> 
    <id>subprofile</id> 
    <activation> 
     <property> 
      <name>fullBuild</name> 
      <value>true</value> 
     </property> 
    </activation> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 
+0

, muhtemelen bir hata, ebeveyn POM gelen çalıştırırken daha sonra –

+0

A.DiMatteo @ Bu çalışması gerekir edecek tekrar test yaptı. Çözümünüz de işe yarayacaktır, ancak tüm '-P 'parametrelerinden pek emin değilim (bunun çok kırılgan olduğunu düşünüyorum) – Tunaki

+1

Her iki çözümün de iyi çalıştığını onaylıyorum. Aslında teklifiniz komut satırından daha az ayrıntılıdır ve aktivasyonu tek bir ortak yerde daha iyi merkezileştirir. –

2

, üst üst/toplayıcı klasöründen, sadece çalıştırabilir subprofile adına sahip herhangi bir profili etkinleştirin (ve böylece istediğiniz profili etkinleştirin).

<profiles> 
    <profile> 
     <id>subprofile</id> 
     <activation> 
      <property> 
       <name>subprofile</name> 
       <value>true</value> 
      </property> 
     </activation> 
     .... 

ve aşağıdaki şekilde çalıştırın:

Alternatif olarak, örneğin subprofile yapılandırabilirsiniz

mvn clean install -Dsubprofile=true -Pbuild_full 

Aynı etki yaratacaktır. value öğesinden bile kaçınabilirsiniz ve -Dsubprofile'u belirtmeniz yeterlidir, onun varlığı profili etkinleştirmek için yeterli olacaktır (bu durumda -DactivateSubprofile gibi daha anlamlı bir ad önerilir). Farklı bir profili aktifleştirdiğinizden, otomatik olarak Maven varsayılanı devre dışı bırakır.

İlgili konular