Run a Ant task in Maven only if a property is set

maven-2, maven-antrun-plugin

Solution

There is an `if` task in Ant-contrib that you could use:

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

You don't need the `<else>`, this was just for demo purpose.

Problem

My `pom.xml` is running an Ant task to deploy a file using FTP. However, this deployment must be only done if the `-Dftp=true` argument is given in the Maven command (i.e. `mvn clean install -Dftp=true`). Thus, I wrote the following code: ``` <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> ``` Using this `pom.xml`, the Ant task is not executed if I do not define the `-Dftp` property in my Maven command. However, if I give any kind of value for this property, for example `-Dftp=false`, the Ant task is run, which is not correct. How configure the AntRun task to be run only if a given property has a given value? ps: I know I can use a `profile` that is only active when `ftp` is equal to `true`. This solution works, but for some reason, I want to have my Antrun plugin `build` block. ``` <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) ```

Original source