2012-10-01 20 views
8

Al implementar una aplicación web, necesito actualizar algunas variables en los recursos de la interfaz de usuario, descomprimir algunos activos y concaturar algunos archivos, actualmente esto se logra a través de una tarea ant. Estoy tratando de ejecutar esta tarea en el proceso de generación experta en el uso de algo como esto ...¿Ejecuta una tarea de hormiga en la fase de construcción de maven antes de que se empaquete la guerra?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>prepare-package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

lo anterior falla debido a que los archivos no se han copiado en el directorio de destino. Si configuro la fase en "paquete", la tarea ant se ejecuta correctamente y todos los archivos se crean/modifican, pero no sirve de nada, ya que el .war ya se ha creado antes de ejecutar el objetivo ant.

Básicamente, necesito ejecutar mi objetivo de hormiga cerca del final de la fase de preparación del paquete.

Después de haber examinado el Lifecycle Reference no puedo entrenar cómo exponer las Metas más granulares al plugin antrun.

¿Alguna idea?

+0

¿Ha pensado en hacer esas tareas de hormiga utilizando en su lugar plugins maven "puros"? – maba

Respuesta

17

Como no recibí ninguna respuesta sobre mi comentario, supongo que quiere seguir usando maven-antrun-plugin.

Por lo que he aprendido y experimentado, si se van a ejecutar dos complementos en la misma fase, se ejecutarán en el orden en que se declaran en pom.xml.

Para que esto funcione, deberá agregar maven-war-plugin en la lista <plugins/> después del maven-antrun-plugin.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <!-- First step is to disable the default-war build step. --> 
      <id>default-war</id> 
      <phase>none</phase> 
     </execution> 
     <execution> 
      <!-- Second step is to create an exploded war. Done in prepare-package --> 
      <id>war-exploded</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>exploded</goal> 
      </goals> 
     </execution> 
     <execution> 
      <!-- Last step is to make sure that the war is built in the package phase --> 
      <id>custom-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

añadido algunos más ejecuciones de modo que la primera default-war es desactivada, entonces la guerra se explotó y, por último, se empaqueta la guerra.

+3

esta fue una respuesta muy útil para mi problema. Sin embargo, tenía una configuración un poco diferente: explotado (prepare-package) -> copy-resources (prepare-package) -> war (paquete). Para no sobreescribir lo que generó la tarea war: explosion, tuve que apuntar '' a un directorio vacío para war: war execution. – omilke

1

Como observó, este es un lugar donde el ciclo de vida no proporciona la granularidad necesaria. Respondí similar question por alguien antes. No es una respuesta exacta a su pregunta, pero la técnica puede aplicarse.

Cuestiones relacionadas