Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

Implementing Maven plugins has never been Groovier!

Groovy Maven plugins are very similar to Java Maven plugins. Actually a Groovy Maven plugin is compiled into Java byte-code, and once built, Maven can not tell the difference between a plugin which has been implemented in Java or Groovy.

For the most part, the existing guide for developing Maven plugins with Java will also apply to developing plugins with Groovy. This guide will cover the basics of how to create a plugin using Groovy as well as some finer points about how using Groovy can make plugin development faster and easier.

First off, please read over the documentation for Building Groovy Projects. A Groovy Maven plugin is a Groovy project, so most of the information there is relevant here as well.

Putting More Groove into your Mojo

Using fail()

Most mojos need to report back some failure status, which is normally done by throwing a MojoExecutionException. Groovy Mojos can simply invoke the fail() method, which handles the details of throwing for you.

Failing with a simple string:

fail("That ain't no woman! It's a man, man!")

Failing with an exception detail:

try {
catch (Exception e) {

Failing with an exception detail and a message:

try {
catch (Exception e) {
    fail("She's the village bicycle! Everybody's had a ride.", e)

gmaven-archetype-mojo Archetype

To help get Groovy plugins started faster, you can use the gmaven-archetype-mojo. This will create a new project with the basic POM configuration and an example Groovy-based Mojo class to get you started quickly:

mvn archetype:generate -DarchetypeGroupId=org.codehaus.groovy.maven.archetypes -DarchetypeArtifactId=gmaven-archetype-mojo

To use a specific version of an archetype specify -DarchetypeVersion=<VERSION>.

The Maven Archetype Plugin will ask a few questions about your new project:

[INFO] [archetype:generate]
Define value for groupId: : org.mycompany.myproject
Define value for artifactId: : example-maven-plugin
Define value for version: : 1.0-SNAPSHOT
Define value for package: : org.mycompany.myproject.example
Confirm properties configuration:
name: Example Maven Plugin
groupId: org.mycompany.myproject
artifactId: example-maven-plugin
version: 1.0-SNAPSHOT
package: org.mycompany.myproject.example
 Y: : y
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------

Please ignore any ReferenceException warnings about ${...}, they are harmless.

The above example would have created the following project structure:


gmaven-plugin Packaging



  • No labels