2010-02-24 16 views
6

Mi pom.xml ejecuta una tarea Ant para implementar un archivo mediante FTP. Sin embargo, esta implementación solo debe realizarse si el argumento -Dftp=true se proporciona en el comando Maven (es decir, mvn clean install -Dftp=true). Por lo tanto, escribí el siguiente código:Ejecutar una tarea Ant en Maven solo si se establece una propiedad

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.2</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <tasks if="ftp"> 
          <echo message="Deploying files through FTP..."/> 
          ... 
         </tasks> 
        </configuration> 
       </execution> 
      </executions> 

El uso de este pom.xml, la tarea Ant no se ejecuta si no se define la propiedad -Dftp en mi comando Maven. Sin embargo, si doy cualquier tipo de valor para esta propiedad, por ejemplo -Dftp=false, se ejecuta la tarea Ant, que no es correcta.

¿Cómo se configura la tarea AntRun para que se ejecute solo si una propiedad determinada tiene un valor determinado?

ps: Sé que puedo usar un profile que solo está activo cuando ftp es igual a true. Esta solución funciona, pero por alguna razón, quiero tener mi complemento Antrun build bloque.

<profiles> 
    <profile> 
     <id>deployment</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
      <property> 
       <name>ftp</name> 
       <value>true</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        ... (define the Ant task here) 

Respuesta

9

No es una tarea if en Ant-contrib que se puede utilizar:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>ftp</id> 
     <phase>package</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <tasks> 
      <taskdef resource="net/sf/antcontrib/antcontrib.properties" 
       classpathref="maven.plugin.classpath" /> 
      <if> 
       <equals arg1="${ftp}" arg2="true" /> 
       <then> 
       <echo message="The value of property ftp is true" /> 
       </then> 
       <else> 
       <echo message="The value of property ftp is not true" /> 
       </else> 
      </if> 
      </tasks> 
     </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
     <groupId>ant-contrib</groupId> 
     <artifactId>ant-contrib</artifactId> 
     <version>20020829</version> 
     </dependency> 
    </dependencies> 
    </plugin> 

No es necesario el <else>, esto era sólo para fines de demostración.

+0

Qué sintaxis horrible (y prolija) para esta tarea 'if'. Pero hace el trabajo, eso es más importante; o) ¡Gracias! – romaintaz

2

En caso de que no te guste la sintaxis IF en Ant-contrib puedes usar antelopetasks.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <inherited>false</inherited> 
    <configuration> 
     <target> 
      <taskdef name="if" classname="ise.antelope.tasks.IfTask"/> 

      <if name="maven.ant.target"> 
       <ant target="${maven.ant.target}"/> 
       <else> 
        <fail message="Please specify a target to execute in 'maven.ant.target' property" /> 
       </else> 
      </if> 
     </target> 
    </configuration> 
    <dependencies> 
     <!-- http://antelope.tigris.org/nonav/docs/manual/bk03.html --> 
     <dependency> 
      <groupId>org.tigris.antelope</groupId> 
      <artifactId>antelopetasks</artifactId> 
      <version>3.2.10</version> 
     </dependency> 
    </dependencies> 
</plugin> 
1

con Maven-antRun-plugin: 1.8 Puede especificar atributos en la configuración < objetivo/> para ejecutar o no tareas Ant según algunas condiciones como se describe en Maven antrun plugin documentation

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <target if="ftp"> 
      <echo message="To run, just call mvn package -Dftp=true"/> 
      </target> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Como se solicitó, pero usando < target/> en lugar de obsoleto < tareas/>

+0

¡Gracias! Funciona para mí (con Maven 3.0.5 y 3.3.9), ese es el camino a seguir en 2017 :) – xav

Cuestiones relacionadas