2010-02-02 18 views
6

Nuestra aplicación se puede crear para varios servidores de aplicaciones y se puede usar en varios entornos.Hay dos perfiles de compilación activos, pero Maven ejecuta las tareas del complemento antrun en un solo perfil

El tipo de servidor de aplicaciones y el entorno de destino deben especificarse utilizando los perfiles de Maven. Uno y solo uno de cada tipo de perfil debe estar presente al compilar el código. Todos los perfiles causan la ejecución de una o varias tareas de copia mavent-antrun-plugin para incluir archivos de configuración correctos en el JAR generado.

A continuación, se incluye una parte del archivo pom.xml. Parte del perfil de AS "oráculo" está incluido, así como parte del "desarrollo" del perfil del entorno. El propósito es que para crear JAR que se pueda implementar en Oracle AS en entorno de desarrollo, el código se compile utilizando dos conmutadores de perfil mvn -P oracle,development

Los perfiles AS también tienen otras tareas (no se muestran a continuación) que deben ejecutarse antes de que tengan lugar las tareas de perfil de entorno (esa es la razón por la cual los perfiles tienen fases diferentes).

Mi problema es que Maven se niega a ejecutar tareas en los dos perfiles seleccionados.

mvn -Poracle funciona tal como se supone. Lo mismo ocurre con mvn -Pdevelopment. Sin embargo, mvn -Poracle,development resulta en la ejecución de solo las tareas en el perfil de Oracle. Si todas las tareas en el complemento antrun del perfil de Oracle están comentadas, entonces las tareas en el perfil de desarrollo se ejecutan.

Mis preguntas son: * ¿Por qué Maven se niega a ejecutar tareas ant en ambos perfiles? * ¿Hay alguna manera de arreglar esto?

La combinación de los perfiles (desarrollo de oracle, desarrollo de jboss, etc.) no es una opción para nosotros, ya que este módulo es parte de un proyecto más grande y requeriría modificaciones en otros proyectos.

Usamos actualmente Maven 2.2.0.

<profile> 
    <id>oracle</id>  
    <build> 
    <plugins>  
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <copy .../> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins>  
    </build> 
</profile>  

...jboss, glassfish profiles... 

<profile> 
    <id>development</id> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>compile</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <copy .../> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

...production, test profiles... 

+0

¿Sus antruns tienen dependencias? – bmargulies

Respuesta

7

añada un ID único para cada ejecución <execution>:

<profile> 
    <id>oracle</id>  
    <build> 
    <plugins>  
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>execution1</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <echo>ORACLE</echo> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins>  
    </build> 
</profile>  
<profile> 
    <id>development</id> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>execution2</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <echo>DEV</echo> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

Probado solución de trabajo :) Sin el elemento <id>, supongo que uno <execution> anula la otra.

Cuestiones relacionadas