2015-12-09 22 views
9

Vorrei costruire da un maven pom che esegue due esecuzioni in sequenza dello stesso plug-in, nella stessa fase che differisce solo da una singola proprietà, il che comporterà la presenza di due archivi diversi creato. Dato che la configurazione è piuttosto complicata, preferisco NON copiarla solo per cambiare un valore, il che creerebbe un incubo di manutenzione. Se fosse possibile in qualche modo definire una proprietà di questo tipo nella sezione <executions> della configurazione del plugin, potrei evitare questo mal di testa.Come eseguire un plugin di Maven due volte con proprietà diverse

Domanda: È possibile e se sì, come?

Aggiornamento: due risposte hanno menzionato l'utilizzo di più esecuzioni e una di queste indica che è possibile avere configurazioni separate in ogni esecuzione. Ma dato che la maggior parte della mia configurazione è costante tra le due esecuzioni, posso avere una configurazione a livello di plugin e anche avere sezioni di configurazione in ogni esecuzione per le parti che sono diverse?

+0

Possibile duplicato di [Come richiamare la stessa generazione di Maven due volte in una chiamata] (http://stackoverflow.com/questions/7239786/how-to-invoke-the-same-maven-build-twice-in- one-call) – approxiblue

+1

Non è un duplicato di quella domanda, direi –

+0

@Steve controllare la mia risposta, sì, si ottiene esattamente al punto (chiarito nel vostro aggiornamento) –

risposta

10

Data la semplice configurazione di Maven Source Plugin (ad esempio) si dispone di una configurazione condivisa tra tutte le esecuzioni (all'esterno dell'elemento executions) e quindi una configurazione personalizzata per ogni esecuzione, per la stessa fase, come richiesto dal domanda:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <includePom>true</includePom> 
      </configuration> 
      <executions> 
       <execution> 
        <id>test-id1</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <finalName>aaa</finalName> 
        </configuration> 
       </execution> 
       <execution> 
        <id>test-id2</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <finalName>bbb</finalName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

la configurazione entry <includePom>true</includePom> sarà in questo caso essere fusa con le configurazioni personalizzate di ogni esecuzione e come tale centralizzare la configurazione comune come plug-in di configurazione generica.

Per ulteriori dettagli sul diverso livello di configurazioni, è possibile consultare la documentazione ufficiale di Maven, here, in particolare l'esempio "Configurazione di compilazione per l'esecuzione due volte". Ulteriori dettagli sono disponibili anche sulla documentazione ufficiale POM, here, sezione Plugin.

+0

Se ho capito bene, hai fornito la risposta alla mia domanda di aggiornamento. Sembra che tu stia dicendo che è possibile definire una configurazione per l'intero plugin (contenente gli elementi costanti) e configurazioni separate nelle esecuzioni (contenente le differenze per esecuzione). È questo che stai dicendo? –

+0

Esattamente, ho appena testato lo snippet che ho postato prima di aggiungerlo alla mia risposta e funziona perfettamente. Collegherò presto la documentazione ufficiale (che ho letto qualche tempo fa esattamente su questo punto). –

+0

interessato Collegamento documentazione ufficiale aggiunto. –

0

È necessario creare un'esecuzione diversa (ancora legato alla stessa fase)

Per evitare la duplicazione della configurazione, si può mettere la <configuration> di fuori l'elemento <execution> e poi nelle 2 esecuzioni, si definisce solo il proprietà che è diversa.

Tratto da l'esperto docs:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-myquery-plugin</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
      <id>execution1</id> 
      <phase>test</phase> 
      <configuration> 
       <url>http://www.foo.com/query</url> 
       <timeout>10</timeout> 
       <options> 
       <option>one</option> 
       <option>two</option> 
       <option>three</option> 
       </options> 
      </configuration> 
      <goals> 
       <goal>query</goal> 
      </goals> 
      </execution> 
      <execution> 
      <id>execution2</id> 
      <configuration> 
       <url>http://www.bar.com/query</url> 
       <timeout>15</timeout> 
       <options> 
       <option>four</option> 
       <option>five</option> 
       <option>six</option> 
       </options> 
      </configuration> 
      <goals> 
       <goal>query</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 
+1

Grazie. Sì, ho visto questa documentazione, ma non ne capisco il significato delle "opzioni". Come vengono utilizzati? L'esempio non lo mostra. Una proprietà ha un nome e un valore, ma un'opzione non sembra. –

+0

Ciao Steve, penso di non capire completamente la tua domanda allora. Potresti chiarire quali bit non sono chiari? ... e hai provato a leggere l'intera pagina collegata? Come spiega come sono configurati i plug-in e come viene ereditata la configurazione. – Augusto

+0

andando a chiarire la domanda. –

0

si creano due < esecuzione> elementi all'interno della dichiarazione < plug-in>. Ogni elemento di esecuzione> < può avere la propria sezione di configurazione <>.