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