Groovy is a dynamic language based on the Java Virtual Machine which compiles to Java bytecode. Groovy is a project in the Codehaus community. If you are fluent in Java, Groovy will seem like a natural choice for a scripting language. Groovy takes the features of Java, pares down the syntax a bit, and adds features like closures, duck-typing, and regular expressions. For more information about Groovy, please see the Groovy web site at http://groovy.codehaus.org.
To create a Maven Plugin using Groovy, you only need two files: a
pom.xml
and a single Mojo implemented in Groovy. To
get started, create a project directory named
firstgroovy-maven-plugin
. Place the following
pom.xml
in this directory.
Example 18.9. POM for a Groovy Maven Plugin
<?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>org.sonatype.mavenbook.plugins</groupId> <artifactId>firstgroovy-maven-plugin</artifactId> <name>Example Groovy Mojo - firstgroovy-maven-plugin</name> <packaging>maven-plugin</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.codehaus.mojo.groovy</groupId> <artifactId>groovy-mojo-support</artifactId> <version>1.0-beta-3</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-plugin-plugin</artifactId> <version>2.3</version> </plugin> <plugin> <groupId>org.codehaus.mojo.groovy</groupId> <artifactId>groovy-maven-plugin</artifactId> <version>1.0-beta-3</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>generateStubs</goal> <goal>compile</goal> <goal>generateTestStubs</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
What's going on in this POM? First, notice that
the packaging of the POM is
maven-plugin
because we are creating a project that
will package a Maven plugin. Next, note that the project depends on the
groovy-mojo-support
artifact in the
org.codehaus.mojo.groovy
group.
Then under src/main/groovy
in a directory
org/sonatype/mavenbook/plugins
, create a file named
EchoMojo.groovy
which contains the EchoMojo
class.
Example 18.10.
package org.sonatype.mavenbook.plugins import org.codehaus.mojo.groovy.GroovyMojo /** * Example goal which echos a message * * @goal echo */ class EchoMojo extends GroovyMojo { /** * Message to print * * @parameter expression="${echo.message}" * default-value="Hello Maven World" */ String message void execute() { log.info( message ) } }