2011-06-10 11 views
8

Ho una generazione di moduli multi-modulo in cui uno dei moduli figlio richiede un obiettivo aggiuntivo da eseguire come parte di una versione. Ma sembra che qualsiasi configurazione del plugin di rilascio di Maven nel modulo figlio venga ignorata a favore della configurazione di default nel modulo genitore.Come sovrascrivere la configurazione di maven-release-plugin in un modulo figlio

Questo è lo snippet dal modulo figlio. La configurazione del plugin è la stessa nella sezione pluginManagement del genitore principale, ma senza l'elemento personalizzato.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId>  
    <version>2.1</version> 
    <configuration> 
     <tagBase>http://mycompany.com/svn/repos/myproject/tags</tagBase> 
     <goals>deploy myCustomPlugin:myCustomGoal</goals> 
    </configuration> 
</plugin> 

Quindi è possibile che un modulo figlio sovrascriva la configurazione del genitore e aggiunge obiettivi aggiuntivi?

Maven versione 2.2.1

risposta

2

Sì e no. Sicuramente un figlio pom può sovrascrivere la configurazione di un plug-in specificato dal suo genitore, e devo presumere di averlo fatto correttamente perché non c'è nulla di veramente difficile. Se controlli l'output di mvn help:effective-pom, dovresti essere in grado di vedere chiaramente che questo modulo ha impostazioni diverse per il plugin di rilascio.

Il problema che si verifica è il comportamento del plug-in di rilascio. In genere, se si esegue un obiettivo o una fase, ad esempio mvn compile, dal modulo root del progetto, esegue prima quell'obiettivo/fase sul modulo radice, quindi su tutti i moduli in ordine reattore, quasi come se si 'eseguilo da solo in ogni modulo. Qualsiasi personalizzazione aggiunta ai moduli figlio ha effetto come previsto. Quando si esegue il plug-in di rilascio, viene eseguito solo nel modulo radice. Non funziona in nessuno dei moduli figlio. Invece, eseguirlo nel modulo radice genera una nuova build utilizzando le stesse impostazioni del modulo root, che funziona per tutti gli altri moduli quasi nello stesso modo, tranne che utilizza la configurazione del modulo radice per tutti i moduli. Non conosco la semantica esatta, ma credo che questo sia analogo al fatto che si eseguono manualmente gli obiettivi di rilascio in ogni figlio e si specificano le opzioni di configurazione come proprietà di sistema nella riga di comando: indipendentemente da come un modulo figlio configura il plugin di rilascio, il la linea di comando args vince.

Non ho mai affrontato questo problema da solo, ed è difficile da dire senza sapere esattamente cosa si sta cercando di realizzare. Forse se puoi esprimere ciò che vuoi fare in questo modulo speciale come profilo, puoi aggiungere un profilo al tuo goals eo preparationGoals. In alternativa, c'è un arguments option sia per la preparazione che per l'esecuzione degli obiettivi con cui potresti riuscire a trucidare.

11

Usa combine.children="append"combine.self="override"

Parent POM

<configuration> 
    <items> 
    <item>parent-1</item> 
    <item>parent-2</item> 
    </items> 
    <properties> 
    <parentKey>parent</parentKey> 
    </properties> 
</configuration> 

pom Bambino

<configuration> 
    <items combine.children="append"> 
    <!-- combine.children="merge" is the default --> 
    <item>child-1</item> 
    </items> 
    <properties combine.self="override"> 
    <!-- combine.self="merge" is the default --> 
    <childKey>child</childKey> 
    </properties> 
</configuration> 

Risultato

<configuration> 
    <items combine.children="append"> 
    <item>parent-1</item> 
    <item>parent-2</item> 
    <item>child-1</item> 
    </items> 
    <properties combine.self="override"> 
    <childKey>child</childKey> 
    </properties> 
</configuration> 

Vedi this blog per ulteriori dettagli

+0

Duro pom efficace ha lavorato bene finora ... – mschonaker

+0

Nope. Questo non ha funzionato per me. – mschonaker

+1

Secondo il blog è richiesto Maven 3.0.2 (e OP utilizza Maven 2).+1 però per il collegamento al blog che mi ha aiutato a capire il comportamento di fusione predefinito –

Problemi correlati