Ruby is an object-oriented scripting language which provides a rich set of facilities for meta-programming and reflection. Ruby's reliance on closures and blocks make for a programming style that is both compact and powerful. Although Ruby has been around since 1993, most people came to know Ruby after it was made popular by a Ruby-based web framework known as Ruby on Rails. JRuby is a Ruby interpreter written in Java. For more information about the Ruby language, see: http://www.ruby-lang.org/, and for more information about JRuby, see: http://jruby.codehaus.org/.
To create a Maven plugin using JRuby, you will need to have a
pom.xml
and a single Mojo implemented in Ruby. To
get started, create a project directory named
firstruby-maven-plugin
. Place the following
pom.xml
in this directory.
Example 18.4. POM for a JRuby Maven Plugin
<project> <modelVersion>4.0.0</modelVersion> <groupId>org.sonatype.mavenbook.plugins</groupId> <artifactId>firstruby-maven-plugin</artifactId> <name>Example Ruby Mojo - firstruby-maven-plugin</name> <packaging>maven-plugin</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>jruby-maven-plugin</artifactId> <version>1.0-beta-4</version> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-plugin-plugin</artifactId> <version>2.3</version> <dependencies> <dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>jruby-maven-plugin</artifactId> <version>1.0-beta-4</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
Next, you will need to create a Mojo implemented in Ruby. Maven is
going to look for a Ruby Mojo in
/data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh/src/main/scripts
. Put the following Ruby
class in
/data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh/src/main/scripts/echo.rb
.
Example 18.5. The Echo Ruby Mojo
# Prints a message # @goal "echo" # @phase "validate" class Echo < Mojo # @parameter type="java.lang.String" default-value="Hello Maven World" expression="${message}" def message end def execute info $message end end run_mojo Echo
The Echo
class must extend
Mojo
, and it must override the
execute()
method. At the end of the
echo.rb
file, you will need to run the mojo with
"run_mojo Echo
". To install this plugin, run mvn
install:
$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Example Ruby Mojo - firstruby-maven-plugin
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
...
[INFO] [plugin:descriptor]
...
[INFO] Applying extractor for language: jruby
[INFO] Ruby Mojo File: /echo.rb
[INFO] Extractor for language: jruby found 1 mojo descriptors.
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
During the build, you should see that the Maven Plugin Plugin's
descriptor goal applies the JRuby extractor to create a
plugin.xml
which captures the annotations in the
Echo
class. If you've configured your default
plugin groups to include org.sonatype.mavenbook.plugins
,
you should be able to run this echo goal with the following
command-line:
$ mvn firstruby:echo
...
[INFO] [firstruby:echo]
[INFO] Hello Maven World
...