Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

November Discount Launch 2022 – Top
We’re finally running a Black Friday launch. All Courses are 30% off until next Friday:

>> GET ACCESS NOW

November Discount Launch 2022 – TEMP TOP (NPI)
We’re finally running a Black Friday launch. All Courses are 30% off until next Friday:

>> GET ACCESS NOW

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

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-ant-run-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.

November Discount Launch 2022 – Bottom
We’re finally running a Black Friday launch. All Courses are 30% off until next Friday:

>> GET ACCESS NOW

Maven footer banner
Comments are closed on this article!