2011-11-23 21 views
11

Ciao, sono molto nuovo per Maven. Vorrei cambiare l'ordine dell'esecuzione plug-in di Maven. Nel mio pom.xml ho plug-in maven-assembly plug-in e plug-in maven. Ho usato il plug-in maven assembly per la creazione di file zip e plug-in maven per copiare il file zip dalla destinazione in qualche altra directory. Quando eseguo pom.xml, il plug-in maven ant viene attivato e cercando il file zip, finalmente ho ricevuto l'errore dicendo che il file zip non è stato trovato. Per favore suggeriscimi come eseguire maven assembly plug-in prima dopo che il plug-in maven deve essere eseguito in modo che copi il file zip nella directory corrispondente.Modifica dell'ordine di esecuzione del plugin Maven

+0

Vale la pena notare che se si dispone di un passo che legge una proprietà da un file non puoi usare quella proprietà nelle fasi successive del pom ... vedi [questo post] (http://stackoverflow.com/questions/8541332/maven-read-version-number-from-property-file/27782825# 27782825) –

risposta

25

Dal momento che dici di essere molto nuovo a Maven .... Le build di Maven sono esecuzioni di una serie di fasi ordinate. Queste fasi sono determinate dal lifecycle appropriato per il progetto based on its packaging.

Pertanto, si controllo quando obiettivo di un plugin viene eseguito da binding it to a particular phase.

Spero che questo aiuti.

EDIT: Inoltre, poiché Maven 3.0.3, per due plugin legati alla stessa fase, l'ordine di esecuzione è la stessa come l'ordine in cui si definire loro. Ad esempio:

<plugin> 
    <artifactId>maven-plugin-1</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-plugin-2</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-plugin-3</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>generate-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 

Nel caso di cui sopra, l'ordine di esecuzione sarebbe:

  1. maven-plugin-3 (generare-risorse)
  2. maven-plugin-1 (process-risorse)
  3. Maven 2-plugin-(processo-risorse)
+0

Grazie per la risposta. – user1062115

6

Plugin nella stessa fase vengono eseguite nell'ordine dichiarato.

Nel caso di pom gerarchia, si deve ri-dichiarare i plugin dalla POM genitore (solo il suo groupId e la sua artifactId) nel pom bambino per specificare l'ordine di esecuzione:

Parent pom.xml

<plugins> 
    <plugin> 
     <groupId>groupid.maven.1</groupId> 
     <artifactId>maven-plugin-1</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

pom.xml Bambino

<plugins> 
    <plugin> 
     <groupId>groupid.maven.2</groupId> 
     <artifactId>maven-plugin-2</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
      </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>groupid.maven.1</groupId> 
     <artifactId>maven-plugin-1</artifactId> 
    </plugin> 
</plugins> 

Poi l'esecuzione è:

  1. maven.plugin.2
  2. maven.plugin.1
0

In Maven 3.0.3 e successivamente, ci sono due regole

  1. plugin le esecuzioni sono ordinate secondo le loro fasi. Vedi https://maven.apache.org/ref/current/maven-core/lifecycles.html per l'ordine delle fasi.

Ad esempio, qui mavin-plugin-1 viene eseguita prima maven-plugin-2 perché la fase di processo delle risorse è definito come che ha luogo prima la fase di compilazione.

<plugin> 
    <artifactId>maven-plugin-2</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>compile</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-plugin-1</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
  1. Se più esecuzioni hanno la stessa fase, quindi il primo ad essere eseguito sarà incorporato in uno (es maven-compilatore-plugin) il cui id è predefinito- qualcosa, quindi le altre esecuzioni si svolgeranno nell'ordine che compaiono nel file pom.

Ad esempio, se si dispone di questo da qualche parte nel vostro pom

 <plugin> 
      <artifactId>maven-plugin-1</artifactId> 
      <version>1.2.3</version> 
      <executions> 
       <execution> 
        <id>my-compile</id> 
        <phase>compile</phase> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-plugin-2</artifactId> 
      <version>4.5.6</version> 
      <executions> 
       <execution> 
        <id>my-compile-2</id> 
        <phase>compile</phase> 
       </execution> 
      </executions> 
     </plugin> 

e questo in qualsiasi punto della pom efficace

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <executions> 
     <execution> 
     <id>**default-compile**</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>compile</goal> 
     </goals> 
     </execution> 
     ... 
    </executions> 
    </plugin> 

allora Maven-compiler-plugin eseguirà Maven-compiler- plugin seguito da maven-plugin-1 e maven-plugin-2.

Se volete Maven-compiler-plugin: compilare obiettivo da eseguire dopo maven-plugin-1 allora si potrebbe fare questo

<plugin> 
    <artifactId>maven-plugin-1</artifactId> 
    <version>1.2.3</version> 
    <executions> 
     <execution> 
      <id>my-compile</id> 
      <phase>compile</phase> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <executions> 
     <execution> 
      <id>something-other-than-**default-compile**</id> 
      <phase>compile</phase> 
     </execution> 
     <execution> 
      <id>**default-compile**</id> 
      <phase>none</phase> 
      <goals> 
       <goal>compile</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
Problemi correlati