To create a Maven plugin using Ant, you will need to have a pom.xml and a single Mojo implemented in Ant. To get started, create a project directory named firstant-maven-plugin. Place the following pom.xml in this directory.
Example 18.1. POM for an Ant Maven Plugin
<project> <modelVersion>4.0.0</modelVersion> <groupId>org.sonatype.mavenbook.plugins</groupId> <artifactId>firstant-maven-plugin</artifactId> <name>Example Ant Mojo - firstant-maven-plugin</name> <packaging>maven-plugin</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-script-ant</artifactId> <version>2.0.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-plugin-plugin</artifactId> <version>2.3</version> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-tools-ant</artifactId> <version>2.0.5</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
Next, you will need to create your Ant Mojo. An Ant mojo consists of
two parts: the Ant tasks in an XML file, and a file
which supplies Mojo descriptor information. The Ant plugin tools are going
to look for both of these files in
/data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh/src/main/scripts
. One file will be named
echo.build.xml
and it will contain the Ant
XML.
Example 18.2. Echo Ant Mojo
<project> <target name="echotarget"> <echo>${message}</echo> </target> </project>
The other file will describe the Echo Ant Mojo and will be in the
echo.mojos.xml
file also in
/data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh/src/main/scripts
.
Example 18.3. Echo Ant Mojo Descriptor
<pluginMetadata> <mojos> <mojo> <goal>echo</goal> <call>echotarget</call> <description>Echos a Message</description> <parameters> <parameter> <name>message</name> <property>message</property> <required>false</required> <expression>${message}</expression> <type>java.lang.Object</type> <defaultValue>Hello Maven World</defaultValue> <description>Prints a message</description> </parameter> </parameters> </mojo> </mojos> </pluginMetadata>
This echo.mojos.xml
file configures the Mojo
descriptor for this plugin. It supplies the goal name "echo", and it tells
Maven what Ant task to call in the call element. In addition to
configuring the description, this XML file configures
the message parameter to use the expression ${message}
and to have a default value of "Hello Maven World."
If you've configured your plugin groups in
~/.m2/settings.xml
to include
org.sonatype.mavenbook.plugins
, you can install this Ant
plugin by executing the following command at the command-line:
$ mvn install
[INFO] ------------------------------------------------------------------------
[INFO] Building Example Ant Mojo - firstant-maven-plugin
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [plugin:descriptor]
[INFO] Using 3 extractors.
[INFO] Applying extractor for language: java
[INFO] Extractor for language: java found 0 mojo descriptors.
[INFO] Applying extractor for language: bsh
[INFO] Extractor for language: bsh found 0 mojo descriptors.
[INFO] Applying extractor for language: ant
[INFO] Extractor for language: ant found 1 mojo descriptors.
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
Note that the plugin:descriptor
goal found a
single Ant mojo descriptor. To run this goal, you would execute the
following command-line:
$ mvn firstant:echo
...
[INFO] [firstant:echo]
echotarget:
[echo] Hello Maven World
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
The echo
goal executed and printed out the
default value of the message
parameter. If you are used
to Apache Ant build scripts, you will notice that Ant prints out the name
of the target executed and then adds a logging prefix to the output of the
echo Ant task.