Introduction
Maven plugins can be written in Java or any of a number of scripting languages. Plugins consists of one or more Mojos, each one being the implementation for one of the plugin's goals.
NOTE: this documentation covers Mojo API introduced in Maven 2 and used by Maven 3. It does not cover the new Maven 4 API.
Although the requirements on Mojos are minimal by design, there are still a very few requirements that Mojo developers must keep in mind:
- a Mojo must have a method named
execute
which declares no parameters, and has a void return type. If this method throws an exception, that exception must either be a derivative ofjava.lang.RuntimeException
, or a derivative oforg.apache.maven.plugin.MojoExecutionException
. It goes without saying that in the latter case, the execute method must declare that it throws this exception. - Additionally, Mojos must declare a field
for each goal parameter they specify, and these parameter fields will be
populated before
execute()
is called. - Finally, all Mojos must be accompanied by metadata in
META-INF/maven/plugin.xml
describing parameters, lifecycle bindings, etc. This descriptor will be covered in more detail below.
Mojo Code
Basically, these Mojo requirements are embodied by the
org.apache.maven.plugin.Mojo
interface, which the Mojo
must implement.
Usually this is done by extending its
abstract base class counterpart org.apache.maven.plugin.AbstractMojo
.
The Mojo will have access to the standard Maven user-feedback mechanism,
org.apache.maven.plugin.logging.Log
,
so the Mojo can communicate important events to the console or other log sink.
The Descriptor and Annotations
As mentioned before, each Plugin - or packaged set of Mojos - must
provide a META-INF/maven/plugin.xml
descriptor file
inside the Plugin jar file.
Fortunately, Maven also provides a set of Java annotations
(named Maven Plugin Tools Java5 Annotations)
and tools (named Plugin Tools) to generate
this descriptor, so developers don't have to worry about directly
authoring or maintaining a separate XML metadata file.
Project Descriptor (POM) Requirements
The POM must declare a packaging element which describes this project as a Maven plugin project:
<packaging>maven-plugin</packaging>
Resources
This section simply gives a listing of pointers for more information.