2016-02-10 14 views
7

Ho la seguente genitore pom.xml di file:Attivazione di un profilo bambino da un profilo Parent

<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> 

e nel mio pom bambino per mymodule_server, ho il seguente:

<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> 

Come, quando ho invoke maven: mvn -P build_full, posso forzare il modulo figlio (mymodule_server) per utilizzare il profilo subprofile anziché default?

risposta

4

No, non è possibile attivare un profilo figlio da un profilo padre. Più in generale, you can't activate or deactivate any profile from any other profile (esiste una richiesta di funzionalità JIRA MNG-3309). Quello che puoi fare è activate two profiles based on the same property.

Prima di tutto, l'utilizzo di un profilo che viene attivato di default non è generalmente una buona idea. Quello che vuoi è attivare un profilo in base ad alcune condizioni (versione del sistema operativo, proprietà del sistema ...). Per risolvere il problema, è possibile attivare il profilo build_full quando è presente una certa proprietà di sistema e assicurarsi che subprofile sia attivato anche quando è presente la stessa proprietà.

Una configurazione di esempio sarebbe la seguente, in cui entrambi i profili sono attivati ​​quando la proprietà di sistema fullBuild è impostata su true. Invocare Maven con mvn -DfullBuild=true ... attiverà quindi entrambi i profili.

<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

Ho appena provato a livello locale prima di pubblicare la mia risposta, probabilmente commesso un errore, andando re-test poi –

+0

@ A.DiMatteo Questo dovrebbe funzionare quando si esegue dal genitore POM. La tua soluzione dovrebbe funzionare anche ma non sono abbastanza comune a tutti i parametri '-P' (penso che sia troppo fragile) – Tunaki

+1

Confermo che entrambe le soluzioni funzionano bene. In effetti la tua proposta è meno dettagliata dalla riga di comando e centralizza l'attivazione in un posto comune, meglio. –

2

Nel tuo caso, dalla cartella principale genitore/aggregatore, si può solo correre:

mvn clean install -Pbuild_full,!default,subprofile 

Sarà disattivare qualsiasi nome del profilo avendo default (e quindi disabilitare il profilo nella sub-modulo in questione) e abilitare qualsiasi profilo con nome subprofile (e quindi abilitare il profilo desiderato).

In alternativa, è possibile configurare subprofile come tale:

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

e quindi eseguire come segue:

mvn clean install -Dsubprofile=true -Pbuild_full 

avrà lo stesso effetto. È anche possibile evitare l'elemento value e specificare semplicemente -Dsubprofile, la sua esistenza sarebbe sufficiente per attivare il profilo (in questo caso viene suggerito un nome più significativo, come -DactivateSubprofile). Poiché attivi un profilo diverso, automaticamente Maven disattiverà quello predefinito.

Problemi correlati