Search code examples
maven-2maven-antrun-plugin

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


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)

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.