mirror of https://github.com/apache/maven.git
o adding doco contributed by Bob Allison
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@306969 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b5ae7fc62f
commit
842eff4c63
|
@ -0,0 +1,66 @@
|
|||
------
|
||||
Plugin Development Guide - Building a Plugin
|
||||
-----
|
||||
Bob Allison
|
||||
------
|
||||
12 October 2005
|
||||
------
|
||||
|
||||
|
||||
Project Definition
|
||||
|
||||
Once the mojos have been written for the plugin, it is time to
|
||||
build the plugin. To do this properly, the project's descriptor
|
||||
needs to have a number of settings set properly:
|
||||
|
||||
*------------------+----------------------------------------------------------+
|
||||
|<<<groupId>>> |This is the group ID for the plugin, and should match the |
|
||||
| |common prefix to the packages used by the mojos |
|
||||
*------------------+----------------------------------------------------------+
|
||||
|<<<artifactId>>> |This is the name of the plugin |
|
||||
*------------------+----------------------------------------------------------+
|
||||
|<<<version>>> |This is the version of the plugin |
|
||||
*------------------+----------------------------------------------------------+
|
||||
|<<<packaging>>> |This should be set to "<<<maven-plugin>>>" |
|
||||
*------------------+----------------------------------------------------------+
|
||||
|<<<dependencies>>>|A dependency must be declared to the Maven Plugin Tools |
|
||||
| |API to resolve "<<<AbstractMojo>>>" and related classes |
|
||||
*------------------+----------------------------------------------------------+
|
||||
|
||||
Listed below is a POM for a plugin which uses the simple sample mojo:
|
||||
|
||||
+----+
|
||||
<project>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>sample.plugin</groupId>
|
||||
<artifactId>maven-hello-plugin</artifactId>
|
||||
<packaging>maven-plugin</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>Sample Parameter-less Maven Plugin</name>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-plugin-tools-api</artifactId>
|
||||
<version>2.0-beta-2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
+----+
|
||||
|
||||
Build Goals
|
||||
|
||||
There are a few goals which are defined with the Maven plugin
|
||||
packaging as part of a standard build lifecycle:
|
||||
|
||||
*-------------+----------------------------------------------------+
|
||||
|<<<compile>>>|Compiles the Java code for the plugin and builds the|
|
||||
| |plugin descriptor |
|
||||
*-------------+----------------------------------------------------+
|
||||
|<<<test>>> |Runs the plugin's unit tests |
|
||||
*-------------+----------------------------------------------------+
|
||||
|<<<package>>>|Builds the plugin jar |
|
||||
*-------------+----------------------------------------------------+
|
||||
|<<<install>>>|Installs the plugin jar in the local repository |
|
||||
*-------------+----------------------------------------------------+
|
||||
|<<<deploy>>> |Deploys the plugin jar to the remote repository |
|
||||
*-------------+----------------------------------------------------+
|
|
@ -0,0 +1,66 @@
|
|||
-------
|
||||
Plugin Development Guide - Your First Mojo
|
||||
-------
|
||||
Bob Allison
|
||||
-------
|
||||
12 October 2005
|
||||
-------
|
||||
|
||||
Your First Mojo
|
||||
|
||||
At its simplest, a Java mojo consists simply of a single class. There is
|
||||
no requirement for multiple classes like EJBs, although a plugin which
|
||||
contains a number of similar mojos is likely to use an abstract
|
||||
superclass for the mojos to consolidate code common to all mojos.
|
||||
|
||||
When processing the source tree to find mojos, the class
|
||||
<<<org.apache.maven.tools.plugin.extractor.java.JavaMojoDescriptorExtractor>>>
|
||||
looks for classes with a "<<<goal>>>" annotation on the class. Any class
|
||||
with this annotation are included in the plugin configuration file.
|
||||
|
||||
A Simple Mojo
|
||||
|
||||
Listed below is a simple mojo class which has no parameters. This is
|
||||
about as simple as a mojo can be. After the listing is a description
|
||||
of the various parts of the source.
|
||||
|
||||
+---+
|
||||
package sample.plugin;
|
||||
|
||||
import org.apache.maven.plugin.AbstractMojo;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
|
||||
/**
|
||||
* @goal sayhi
|
||||
* @description Says "Hi" to the user
|
||||
*/
|
||||
public class GreetingMojo extends AbstractMojo {
|
||||
public void execute() throws MojoExecutionException {
|
||||
getLog().info("Hello, world.");
|
||||
}
|
||||
}
|
||||
+---+
|
||||
|
||||
* The class <<<org.apache.maven.plugin.AbstractMojo>>> provides most of the
|
||||
infrastructure required to implement a mojo except for the
|
||||
<<<execute>>> method.
|
||||
|
||||
* The comment lines starting with "<<<@goal>>>" and "<<<@description>>>"
|
||||
are examples of annotations. These two annotations are required, but
|
||||
there are a number of annotations which can be used to control how and
|
||||
when the mojo is executed.
|
||||
|
||||
* The <<<execute>>> method can throw two exceptions:
|
||||
|
||||
* <<<org.apache.maven.plugin.MojoExecutionException>>> if an unexpected
|
||||
problem occurs. Throwing this exception causes a "BUILD ERROR" message
|
||||
to be displayed.
|
||||
|
||||
* <<<org.apache.maven.plugin.MojoFailureException>>> if an expected
|
||||
problem (such as a compilation failure) occurs. Throwing this exception
|
||||
causes a "BUILD FAILURE" message to be displayed.
|
||||
|
||||
* The <<<getLog>>> method (defined in <<<AbstractMojo>>>) returns a
|
||||
log4j-like logger object which allows plugins to create messages at levels
|
||||
of "debug", "info", "warn", and "error". This logger is the accepted means
|
||||
to display information to the user.
|
|
@ -0,0 +1,15 @@
|
|||
-------
|
||||
Plugin Development Guide - Your First Plugin
|
||||
-------
|
||||
Bob Allison
|
||||
-------
|
||||
12 October 2005
|
||||
-------
|
||||
|
||||
Your First Plugin
|
||||
|
||||
This section of the document walks the reader through the process
|
||||
of building a simple plugin which takes no parameters and simply
|
||||
displays a message on the screen when run. It covers the basics of
|
||||
setting up a project to create a plugin, the minimal contents of a
|
||||
Java mojo, and the means to cause the mojo to be executed.
|
|
@ -0,0 +1,44 @@
|
|||
------
|
||||
Plugin Development Guide - Executing Your First Mojo
|
||||
------
|
||||
Bob Allison
|
||||
------
|
||||
12 October 2005
|
||||
------
|
||||
|
||||
|
||||
Executing Your First Mojo
|
||||
|
||||
The most direct means of executing your new plugin is to specify the
|
||||
plugin goal directly on the command line. To do this, you need to
|
||||
specify a fully-qualified goal in the form of:
|
||||
|
||||
+----+
|
||||
groupID:artifactID:version:goal
|
||||
+----+
|
||||
|
||||
For example, to run the simple mojo in the sample plugin, you would enter
|
||||
"<<<m2 sample.plugin:maven-hello-plugin:1.0-SNAPSHOT:sayhi>>>" on the
|
||||
command line.
|
||||
|
||||
Shortening the Command Line
|
||||
|
||||
It is possible to shorten the amount of typing needed on the command
|
||||
line. To do this, you need to install the plugin with the
|
||||
<<<updateReleaseInfo>>> option set to true; for example:
|
||||
|
||||
+----+
|
||||
m2 -DupdateReleaseInfo=true install
|
||||
+----+
|
||||
|
||||
You also need to add your plugin's group ID to the list of group IDs
|
||||
searched by default. To do this, you need to add the following to
|
||||
your <<<settings.xml>>> file:
|
||||
|
||||
+----+
|
||||
<pluginGroups>
|
||||
<pluginGroup>sample.plugin</pluginGroup>
|
||||
</pluginGroups>
|
||||
+----+
|
||||
|
||||
At this point, you can run the mojo with "<<<m2 hello:sayhi>>>".
|
|
@ -0,0 +1,17 @@
|
|||
------
|
||||
Plugin Development Guide - Introduction
|
||||
------
|
||||
Bob Allison
|
||||
------
|
||||
12 October 2005
|
||||
-----
|
||||
|
||||
Introduction
|
||||
|
||||
This web site contains documentation to assist users in developing
|
||||
their own plugins. \xAB<Text like this are comments identifying known
|
||||
problems with this documentation. As the problems are fixed these
|
||||
comments should be removed.>\xBB
|
||||
|
||||
\xAB<Should the plugin overview (at least the first part of it) be
|
||||
repeated here for clarity?>\xBB
|
Loading…
Reference in New Issue