Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Introduction

Maven and Ant are both well-known build automation tools for Java. Although most of the time we’ll only use one of these, there are cases when using the two together makes sense.

A common use case is when working on a legacy project that uses Ant, and we want to introduce Maven gradually while still keeping some existing Ant tasks in place.

In this tutorial, we’ll cover how to do this using the Maven AntRun Plugin.

2. Maven AntRun Plugin

Maven AntRun Plugin allows us to run Ant tasks within Maven.

2.1. Adding the Plugin

To use this plugin, we need to add it to our Maven project’s build plugins:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        ...
    </executions>
</plugin>

The latest plugin version can be found on the Maven Central (although it hasn’t been updated in a long time).

2.2. Plugin Executions

As with any other Maven plugin, to make use of AntRun plugin, we need to define executions.

In the example below, we’re defining one execution tied to Maven’s package phase, which will zip the final JAR file from the project’s target directory:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>zip-artifacts</id>
            <phase>package</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <zip destfile="${project.basedir}/package.zip" 
                       basedir="${project.build.directory}" 
                       includes="*.jar" />
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

To execute the plugin, we run the command:

mvn package

Since we declared our plugin to run during Maven’s package phase, running Maven’s package goal will execute our plugin configuration above.

3. Example Using build.xml File

Aside from allowing us to define Ant targets in plugin configuration, we can also use an existing Ant build.xml file.

3.1. build.xml

Below is an example of a project’s Ant build.xml file with a target defined to upload zip files from the project’s base directory to an FTP server:

<project name="MyProject" default="dist" basedir=".">
   <description>Project Description</description>

   ...
   
    <target name="ftpArtifact">
        <ftp 
          server="${ftp.host}" 
          userid="${ftp.user}" 
          password="${ftp.password}">
            <fileset dir="${project.basedir}>
                <include name="**/*.zip" />
            </fileset>
        </ftp>
    </target>
</project>

3.2. Plugin Configuration

To use the above build.xml file, we define the execution in our plugin declaration:

<execution>
    <id>deploy-artifact</id>
    <phase>install</phase>
    <goals>
        <goal>run</goal>
    </goals>
    <configuration>
        <target>
            <ant antfile="${basedir}/build.xml">
                <target name="ftpArtifact"/>
            </ant>
        </target>
    </configuration>
</execution>

Since the ftp task isn’t included in ant.jar, we need to add Ant’s optional dependencies to our plugin configuration:

<plugin>
    <executions>
       ...
    </executions>
    <dependencies>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-commons-net</artifactId>
            <version>1.8.1</version>
        </dependency>
    </dependencies>
</plugin>

To execute the plugin, we run the command:

mvn install

4. Conclusion

In this short article, we’ve discussed running Ant tasks with Maven’s AntRun plugin. Even though it’s a very simple plugin, having only one goal, this plugin can prove to be effective in projects and teams that prefer the use of Ant for specific build instructions.

And, if you want to learn more about Ant and Maven, you can read our article, comparing these two – along with Gradle.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – Maven (eBook) (cat=Maven)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.