2011-11-23 24 views
11

Hola, soy muy nuevo en maven. Me gustaría cambiar el orden de la ejecución del complemento maven. En mi pom.xml tengo plug-in maven-assembly y plug-in maven ant. Utilicé el complemento maven assembly para crear el archivo zip y el plug-in maven ant para copiar el archivo zip del target a algún otro directorio. Cuando ejecuto pom.xml, el plug-in de maven ant se activó y, al buscar el archivo zip, finalmente recibí el error que decía que no se encontraba el archivo zip. Por favor, sugiera la forma de ejecutar el Ensamblaje de Maven Plug primero después de que el plug-in Maven Ant necesite ejecutarse para que copie el archivo zip en el directorio correspondiente.Cambiar el orden de la ejecución del complemento maven

+0

Vale la pena señalar que si usted tiene un paso que lee una propiedad de un archivo no se puede usar esa propiedad en etapas posteriores en el pom ... ver [esta publicación] (http://stackoverflow.com/questions/8541332/maven-read-version-number-from-property-file/27782825# 27782825) –

Respuesta

25

Dado que dices que eres nuevo en Maven ... las compilaciones de Maven son ejecuciones de una serie ordenada de fases. Estas fases están determinadas por el lifecycle que es apropiado para su proyecto based on its packaging.

Por lo tanto, que de control cuando El objetivo de un plugin es ejecutado por binding it to a particular phase.

Espero que ayude.

EDIT: Además, dado que Maven 3.0.3, para los dos plugins unidos a la misma fase , el orden de ejecución es el mismo que el orden en que se defina ellos. Por ejemplo:

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

En el ejemplo anterior, el orden de ejecución sería:

  1. maven-plugin-3 (generar-recursos)
  2. maven-plugin-1 (proceso de recursos)
  3. maven-plugin-2 (proceso de recursos)
+0

Gracias por su respuesta. – user1062115

6

plugins en la misma fase se ejecutan en el orden declarado.

En el caso de la jerarquía del pom, usted tiene que volver a declarar los complementos del pom padre (sólo su groupId y su artifactId) en el POM niño para especificar el orden de ejecución: pom.xml

Padres

<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 niño

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

A continuación, la ejecución es:

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

En Maven 3.0.3 y más adelante, hay dos reglas

  1. Plugin las ejecuciones se ordenan según sus fases. Consulte https://maven.apache.org/ref/current/maven-core/lifecycles.html para el orden de las fases.

Por ejemplo, aquí mavin-plugin-1 se ejecuta antes de maven-plugin-2 porque la fase de proceso de recursos se define como que tiene lugar antes de la fase de compilación.

<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. Si múltiples ejecuciones tienen la misma fase, a continuación, el primero en ser ejecutado habrá la incorporada en uno (por ejemplo maven-compilador-plugin) cuyo id es predeterminado- algo, luego las otras ejecuciones tendrán lugar en el orden que aparecen en su archivo pom.

Por ejemplo, si usted tiene esto en alguna parte en su 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> 

y esto en cualquier parte del pom efectiva

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

continuación maven-compilador-plugin se ejecutará experto-compiler- complemento seguido de maven-plugin-1 y maven-plugin-2.

Si desea experto compilador-plugin: compilar objetivo de ejecutar después de maven-plugin-1, entonces usted puede hacer esto

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