mirror of https://github.com/apache/maven.git
o integrating consolidated guide, thanks to bob allison.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@321153 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b4c955faf3
commit
caa799fe41
|
@ -1,66 +0,0 @@
|
||||||
------
|
|
||||||
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 |
|
|
||||||
*-------------+----------------------------------------------------+
|
|
|
@ -1,66 +0,0 @@
|
||||||
-------
|
|
||||||
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.
|
|
|
@ -1,15 +0,0 @@
|
||||||
-------
|
|
||||||
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.
|
|
|
@ -1,73 +0,0 @@
|
||||||
------
|
|
||||||
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>>>".
|
|
||||||
|
|
||||||
|
|
||||||
Attaching the Mojo to the Build Lifecycle
|
|
||||||
|
|
||||||
You can also configure your plugin to attach specific goals to a particular
|
|
||||||
phase of the build lifecycle. Here is an example:
|
|
||||||
|
|
||||||
+-----+
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>sample.plugin</groupId>
|
|
||||||
<artifactId>maven-hello-plugin</artifactId>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>compile</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>sayhi</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
+-----+
|
|
||||||
|
|
||||||
This causes the simple mojo to be executed whenever Java code is compiled.
|
|
||||||
For more information on binding a mojo to phases in the lifecycle, please
|
|
||||||
refer to the {{{/maven2/lifecycle.html}Build Lifecycle}} document.
|
|
|
@ -0,0 +1,395 @@
|
||||||
|
------
|
||||||
|
Guide to Developing Java Plugins
|
||||||
|
------
|
||||||
|
Bob Allison
|
||||||
|
------
|
||||||
|
12 October 2005
|
||||||
|
------
|
||||||
|
|
||||||
|
~~ Copyright 2001-2005 The Apache Software Foundation.
|
||||||
|
~~
|
||||||
|
~~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
~~ you may not use this file except in compliance with the License.
|
||||||
|
~~ You may obtain a copy of the License at
|
||||||
|
~~
|
||||||
|
~~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~~
|
||||||
|
~~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
~~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
~~ See the License for the specific language governing permissions and
|
||||||
|
~~ limitations under the License.
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
|
||||||
|
This guide is intended to assist users in developing Java plugins for
|
||||||
|
Maven 2.0.
|
||||||
|
|
||||||
|
* Your First Plugin
|
||||||
|
|
||||||
|
In this section we will build a simple plugin which takes no parameters
|
||||||
|
and simply displays a message on the screen when run. Along the way, we
|
||||||
|
will cover the basics of setting up a project to create a plugin, the
|
||||||
|
minimal contents of a Java mojo, and a couple ways to execute the mojo.
|
||||||
|
|
||||||
|
** 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.
|
||||||
|
|
||||||
|
** 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</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 |
|
||||||
|
*-------------+----------------------------------------------------+
|
||||||
|
|
||||||
|
** 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>>>".
|
||||||
|
|
||||||
|
|
||||||
|
*** Attaching the Mojo to the Build Lifecycle
|
||||||
|
|
||||||
|
You can also configure your plugin to attach specific goals to a particular
|
||||||
|
phase of the build lifecycle. Here is an example:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>sample.plugin</groupId>
|
||||||
|
<artifactId>maven-hello-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>sayhi</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
+-----+
|
||||||
|
|
||||||
|
This causes the simple mojo to be executed whenever Java code is compiled.
|
||||||
|
For more information on binding a mojo to phases in the lifecycle, please
|
||||||
|
refer to the {{{/maven2/lifecycle.html}Build Lifecycle}} document.
|
||||||
|
|
||||||
|
|
||||||
|
* Parameters
|
||||||
|
|
||||||
|
It is unlikely that a mojo will be very useful without parameters.
|
||||||
|
Parameters provide a few very important functions:
|
||||||
|
|
||||||
|
* It provides hooks to allow the user to adjust the operation of the
|
||||||
|
plugin to suit their needs.
|
||||||
|
|
||||||
|
* It provides a means to easily extract the value of elements from
|
||||||
|
the POM without the need to navigate the objects.
|
||||||
|
|
||||||
|
** Defining Parameters Within a Mojo
|
||||||
|
|
||||||
|
Defining a parameter is as simple as creating an instance variable
|
||||||
|
in the mojo and adding the proper annotations. Listed below is an
|
||||||
|
example of a parameter for the simple mojo:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
/**
|
||||||
|
* The greeting to display.
|
||||||
|
* @parameter expression="Hello"
|
||||||
|
*/
|
||||||
|
private String greeting;
|
||||||
|
+-----+
|
||||||
|
|
||||||
|
The portion before the annotations is the description of the
|
||||||
|
parameter. The "<<<parameter>>>" annotation identifies
|
||||||
|
the variable as a mojo parameter. The "<<<expression>>>"
|
||||||
|
parameter defines the default value for the variable. This value can
|
||||||
|
include expressions which reference the project, such as
|
||||||
|
"<<<${project.version}>>>" (more can be found in the
|
||||||
|
"Parameter Expressions" document). The name of the variable is used
|
||||||
|
as the name of the parameter.
|
||||||
|
|
||||||
|
** Configuring Parameters in a Project
|
||||||
|
|
||||||
|
Configuring the parameter values for a plugin is done in a Maven 2
|
||||||
|
project within the <<<pom.xml>>> file as part of defining the
|
||||||
|
plugin in the project. An example of configuring a plugin:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
<plugin>
|
||||||
|
<groupId>sample.plugin</groupId>
|
||||||
|
<artifactId>maven-hello-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<greeting>Welcome</greeting>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
+-----+
|
||||||
|
|
||||||
|
In the configuration section, the element name
|
||||||
|
("<<<greeting>>>") is the parameter name and the contents of
|
||||||
|
the element ("<<<Welcome>>>") is the value to be assigned to
|
||||||
|
the parameter. More details can be found in the
|
||||||
|
{{{../mini/guide-configuring-plugins.html}Guide to Configuring Plugins}}.
|
||||||
|
|
||||||
|
** Parameter Types With One Value
|
||||||
|
|
||||||
|
Listed below are the various types of simple variables which can be used as
|
||||||
|
parameters in your mojos, along with any rules on how the values in the
|
||||||
|
POM are interpreted.
|
||||||
|
|
||||||
|
*** Boolean
|
||||||
|
|
||||||
|
This includes variables typed <<<boolean>>> and <<<Boolean>>>. When reading
|
||||||
|
the configuration, the text "<<<true>>>" causes the parameter to be set to
|
||||||
|
true and all other text causes the parameter to be set to false.
|
||||||
|
|
||||||
|
*** Fixed-Point Numbers
|
||||||
|
|
||||||
|
This includes variables typed <<<byte>>>, <<<Byte>>>, <<<int>>>,
|
||||||
|
<<<Integer>>>, <<<long>>>, <<<Long>>>, <<<short>>>, and <<<Short>>>. When
|
||||||
|
reading the configuration, the text in the XML file is converted to an
|
||||||
|
integer value using either <<<Integer.parseInt()>>> or the <<<valueOf()>>>
|
||||||
|
method of the appropriate class. This means that the strings must be valid
|
||||||
|
decimal integer values, consisting only of the digits 0 to 9 with an optional
|
||||||
|
<<<->>> in front for a negative value.
|
||||||
|
|
||||||
|
*** Floating-Point Numbers
|
||||||
|
|
||||||
|
This includes variables typed <<<double>>>, <<<Double>>>, <<<float>>>, and
|
||||||
|
<<<Float>>>. When reading the configuration, the text in the XML file is
|
||||||
|
converted to binary form using the <<<valueOf()>>> method for the appropriate
|
||||||
|
class. This means that the strings can take on any format specified in
|
||||||
|
section 3.10.2 of the Java Language Specification. Some samples of valid
|
||||||
|
values are <<<1.0>>> and <<<6.02E+23>>>.
|
||||||
|
|
||||||
|
*** Dates
|
||||||
|
|
||||||
|
This includes variables typed <<<Date>>>. When reading the configuration,
|
||||||
|
the text in the XML file is converted using one of the following date
|
||||||
|
formats: "<<<yyyy-MM-dd HH:mm:ss.S a>>>" (a sample date is "2005-10-06
|
||||||
|
2:22:55.1 PM") or "<<<yyyy-MM-dd HH:mm:ssa>>>" (a sample date is "2005-10-06
|
||||||
|
2:22:55PM"). Note that parsing is done using <<<DateFormat.parse()>>> which
|
||||||
|
allows some leniency in formatting. If the method can parse a date and time
|
||||||
|
out of what is specified it will do so even if it doesn't exactly match the
|
||||||
|
patterns above.
|
||||||
|
|
||||||
|
*** Files and Directories
|
||||||
|
|
||||||
|
This includes variables typed <<<File>>>. When reading the configuration,
|
||||||
|
the text in the XML file is used as the path to the desired file or
|
||||||
|
directory. If the path is relative (does not start with <<</>>> or a drive
|
||||||
|
letter like <<<C:>>>), the path is relative to the directory containing
|
||||||
|
the POM.
|
||||||
|
|
||||||
|
*** URLs
|
||||||
|
|
||||||
|
This includes variables typed <<<URL>>>. When reading the configuration, the
|
||||||
|
text in the XML file is used as the URL. The format must follow the RFC 2396
|
||||||
|
guidelines, and looks like any web browser URL
|
||||||
|
(<<<scheme://host:port/path/to/file>>>). No restrictions are placed on the
|
||||||
|
content of any of the parts of the URL while converting the URL.
|
||||||
|
|
||||||
|
*** Plain Text
|
||||||
|
|
||||||
|
This includes variables typed <<<char>>>, <<<Character>>>, <<<StringBuffer>>>,
|
||||||
|
and <<<String>>>. When reading the configuration, the text in the XML file is
|
||||||
|
used as the value to be assigned to the parameter. For <<<char>>> and
|
||||||
|
<<<Character>>> parameters, only the first character of the text is used.
|
||||||
|
|
||||||
|
** Parameter Types With Multiple Values
|
||||||
|
|
||||||
|
Listed below are the various types of composite objects which can be used as
|
||||||
|
parameters in your mojos, along with any rules on how the values in the
|
||||||
|
POM are interpreted. In general, the class of the object created to hold the
|
||||||
|
parameter value (as well as the class for each element within the parameter
|
||||||
|
value) is determined as follows (the first step which yields a valid class
|
||||||
|
is used):
|
||||||
|
|
||||||
|
[[1]] If the XML contains an <<<implementation>>> hint, that is used
|
||||||
|
|
||||||
|
[[2]] If the XML tag contains a <<<.>>>, try that as a class name
|
||||||
|
|
||||||
|
[[3]] Try the XML tag as a class in the same package as the object being
|
||||||
|
configured
|
||||||
|
|
||||||
|
[[4]] For arrays, use the class of the array (for example, use <<<String>>>
|
||||||
|
for a <<<String[]>>> parameter); for collections and maps, use the
|
||||||
|
class specified in the mojo configuration for the collection or map;
|
||||||
|
use <<<String>>> for entries in a collection and values in a map
|
||||||
|
|
||||||
|
Once the type for the element is defined, the text in the XML file is
|
||||||
|
converted to the appropriate type of object
|
||||||
|
|
||||||
|
*** Arrays
|
||||||
|
|
||||||
|
Array type parameters are configured by specifying the parameter multiple
|
||||||
|
times (for example, "<<< <param>value1</param> <param>value2</param> >>>").
|
||||||
|
|
||||||
|
*** Collections
|
||||||
|
|
||||||
|
This category covers any class which implements <<<java.util.Collection>>>
|
||||||
|
such as <<<ArrayList>>> or <<<HashSet>>>. These parameters are configured by
|
||||||
|
specifying the parameter multiple times just like an array.
|
||||||
|
|
||||||
|
*** Maps
|
||||||
|
|
||||||
|
This category covers any class which implements <<<java.util.Map>>>
|
||||||
|
such as <<<HashMap>>> but does <<not>> implement <<<java.util.Properties>>>.
|
||||||
|
These parameters are configured by including XML tags in the form
|
||||||
|
<<< <key>value</key> >>> in the parameter configuration.
|
||||||
|
|
||||||
|
*** Properties
|
||||||
|
|
||||||
|
This category covers any map which implements <<<java.util.Properties>>>.
|
||||||
|
These parameters are configured by including XML tags in the form
|
||||||
|
<<< <key>value</key> >>> in the parameter configuration.
|
||||||
|
|
||||||
|
*** Other Object Classes
|
||||||
|
|
||||||
|
This category covers any class which does not implement <<<java.util.Map>>>,
|
||||||
|
<<<java.util.Collection>>>, or <<<java.util.Dictionary>>>.
|
||||||
|
|
||||||
|
* Resources
|
||||||
|
|
||||||
|
[[1]] {{{developers/mojo-api-specification.html}Mojo API specification}}
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
------
|
|
||||||
Plugin Development Guide
|
|
||||||
------
|
|
||||||
John Casey
|
|
||||||
------
|
|
||||||
24 June 2005
|
|
||||||
------
|
|
||||||
|
|
||||||
~~ Copyright 2001-2004 The Apache Software Foundation.
|
|
||||||
~~
|
|
||||||
~~ Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
~~ you may not use this file except in compliance with the License.
|
|
||||||
~~ You may obtain a copy of the License at
|
|
||||||
~~
|
|
||||||
~~ http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
~~
|
|
||||||
~~ Unless required by applicable law or agreed to in writing, software
|
|
||||||
~~ distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
~~ See the License for the specific language governing permissions and
|
|
||||||
~~ limitations under the License.
|
|
||||||
|
|
||||||
Developing Maven 2.0 Plugins
|
|
||||||
|
|
||||||
* Introduction
|
|
||||||
|
|
||||||
* Your First Plugin (<Java>)
|
|
||||||
|
|
||||||
** Write the Mojo
|
|
||||||
|
|
||||||
** Annotate the Mojo
|
|
||||||
|
|
||||||
** Build the Plugin (<Including POM Modifications>)
|
|
||||||
|
|
||||||
|
|
||||||
* Plugins in the Build
|
|
||||||
|
|
||||||
** I Want My preReqs!
|
|
||||||
|
|
||||||
** Decorating Existing Builds (<What About pre/postGoals?>)
|
|
||||||
|
|
||||||
** Getting Information into the Plugin (<Plugin Configuration>)
|
|
||||||
|
|
||||||
|
|
||||||
* Plugins in the Wild
|
|
||||||
|
|
||||||
** Why Might a Plugin Be Maven-Centric?
|
|
||||||
|
|
||||||
** Curing Dependence on Maven
|
|
||||||
|
|
||||||
** Injecting Configuration into a Plugin
|
|
||||||
|
|
||||||
|
|
||||||
* Resources
|
|
||||||
|
|
||||||
[[1]] {{{developers/mojo-api-specification.html}Mojo API specification}}
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
------
|
|
||||||
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
|
|
|
@ -1,184 +0,0 @@
|
||||||
-----
|
|
||||||
Plugin Development Guide - Adding Parameters
|
|
||||||
-----
|
|
||||||
|
|
||||||
What Are Parameters
|
|
||||||
|
|
||||||
It is unlikely that a mojo will be very useful without parameters.
|
|
||||||
Parameters provide a few very important functions:
|
|
||||||
|
|
||||||
* It provides hooks to allow the user to adjust the operation of the
|
|
||||||
plugin to suit their needs.
|
|
||||||
|
|
||||||
* It provides a means to easily extract the value of elements from
|
|
||||||
the POM without the need to navigate the objects.
|
|
||||||
|
|
||||||
Defining Parameters Within a Mojo
|
|
||||||
|
|
||||||
Defining a parameter is as simple as creating an instance variable
|
|
||||||
in the mojo and adding the proper annotations. Listed below is an
|
|
||||||
example of a parameter for the simple mojo:
|
|
||||||
|
|
||||||
+-----+
|
|
||||||
/**
|
|
||||||
* The greeting to display.
|
|
||||||
* @parameter expression="Hello"
|
|
||||||
*/
|
|
||||||
private String greeting;
|
|
||||||
+-----+
|
|
||||||
|
|
||||||
The portion before the annotations is the description of the
|
|
||||||
parameter. The "<<<parameter>>>" annotation identifies
|
|
||||||
the variable as a mojo parameter. The "<<<expression>>>"
|
|
||||||
parameter defines the default value for the variable. This value can
|
|
||||||
include expressions which reference the project, such as
|
|
||||||
"<<<${project.version}>>>" (more can be found in the
|
|
||||||
"Parameter Expressions" document). The name of the variable is used
|
|
||||||
as the name of the parameter.
|
|
||||||
|
|
||||||
Configuring Parameters in a Project
|
|
||||||
|
|
||||||
Configuring the parameter values for a plugin is done in a Maven 2
|
|
||||||
project within the <<<pom.xml>>> file as part of defining the
|
|
||||||
plugin in the project. An example of configuring a plugin:
|
|
||||||
|
|
||||||
+-----+
|
|
||||||
<plugin>
|
|
||||||
<groupId>sample.plugin</groupId>
|
|
||||||
<artifactId>maven-hello-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<greeting>Welcome</greeting>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
+-----+
|
|
||||||
|
|
||||||
In the configuration section, the element name
|
|
||||||
("<<<greeting>>>") is the parameter name and the contents of
|
|
||||||
the element ("<<<Welcome>>>") is the value to be assigned to
|
|
||||||
the parameter. More details can be found in the Getting Started
|
|
||||||
Guide section on
|
|
||||||
{{{/maven2/getting-started.html#configuring_plugins}configuring plugins}}.
|
|
||||||
|
|
||||||
Parameter Types With One Value
|
|
||||||
|
|
||||||
Listed below are the various types of simple variables which can be used as
|
|
||||||
parameters in your mojos, along with any rules on how the values in the
|
|
||||||
POM are interpreted.
|
|
||||||
|
|
||||||
* Boolean
|
|
||||||
|
|
||||||
This includes variables typed <<<boolean>>> and <<<Boolean>>>. When reading
|
|
||||||
the configuration, the text "<<<true>>>" causes the parameter to be set to
|
|
||||||
true and all other text causes the parameter to be set to false.
|
|
||||||
|
|
||||||
* Fixed-Point Numbers
|
|
||||||
|
|
||||||
This includes variables typed <<<byte>>>, <<<Byte>>>, <<<int>>>,
|
|
||||||
<<<Integer>>>, <<<long>>>, <<<Long>>>, <<<short>>>, and <<<Short>>>. When
|
|
||||||
reading the configuration, the text in the XML file is converted to an
|
|
||||||
integer value using either <<<Integer.parseInt()>>> or the <<<valueOf()>>>
|
|
||||||
method of the appropriate class. This means that the strings must be valid
|
|
||||||
decimal integer values, consisting only of the digits 0 to 9 with an optional
|
|
||||||
<<<->>> in front for a negative value.
|
|
||||||
|
|
||||||
* Floating-Point Numbers
|
|
||||||
|
|
||||||
This includes variables typed <<<double>>>, <<<Double>>>, <<<float>>>, and
|
|
||||||
<<<Float>>>. When reading the configuration, the text in the XML file is
|
|
||||||
converted to binary form using the <<<valueOf()>>> method for the appropriate
|
|
||||||
class. This means that the strings can take on any format specified in
|
|
||||||
section 3.10.2 of the Java Language Specification. Some samples of valid
|
|
||||||
values are <<<1.0>>> and <<<6.02E+23>>>.
|
|
||||||
|
|
||||||
* Dates
|
|
||||||
|
|
||||||
This includes variables typed <<<Date>>>. When reading the configuration,
|
|
||||||
the text in the XML file is converted using one of the following date
|
|
||||||
formats: "<<<yyyy-MM-dd HH:mm:ss.S a>>>" (a sample date is "2005-10-06
|
|
||||||
2:22:55.1 PM") or "<<<yyyy-MM-dd HH:mm:ssa>>>" (a sample date is "2005-10-06
|
|
||||||
2:22:55PM"). Note that parsing is done using <<<DateFormat.parse()>>> which
|
|
||||||
allows some leniency in formatting. If the method can parse a date and time
|
|
||||||
out of what is specified it will do so even if it doesn't exactly match the
|
|
||||||
patterns above.
|
|
||||||
|
|
||||||
* Files and Directories
|
|
||||||
|
|
||||||
This includes variables typed <<<File>>>. When reading the configuration,
|
|
||||||
the text in the XML file is used as the path to the desired file or
|
|
||||||
directory. If the path is relative (does not start with <<</>>> or a drive
|
|
||||||
letter like <<<C:>>>), the path is relative to the directory containing
|
|
||||||
the POM.
|
|
||||||
|
|
||||||
* URLs
|
|
||||||
|
|
||||||
This includes variables typed <<<URL>>>. When reading the configuration, the
|
|
||||||
text in the XML file is used as the URL. The format must follow the RFC 2396
|
|
||||||
guidelines, and looks like any web browser URL
|
|
||||||
(<<<scheme://host:port/path/to/file>>>). No restrictions are placed on the
|
|
||||||
content of any of the parts of the URL while converting the URL.
|
|
||||||
|
|
||||||
* Plain Text
|
|
||||||
|
|
||||||
This includes variables typed <<<char>>>, <<<Character>>>, <<<StringBuffer>>>,
|
|
||||||
and <<<String>>>. When reading the configuration, the text in the XML file is
|
|
||||||
used as the value to be assigned to the parameter. For <<<char>>> and
|
|
||||||
<<<Character>>> parameters, only the first character of the text is used.
|
|
||||||
|
|
||||||
Parameter Types With Multiple Values
|
|
||||||
|
|
||||||
Listed below are the various types of composite objects which can be used as
|
|
||||||
parameters in your mojos, along with any rules on how the values in the
|
|
||||||
POM are interpreted. In general, the class of the object created to hold the
|
|
||||||
parameter value (as well as the class for each element within the parameter
|
|
||||||
value) is determined as follows (the first step which yields a valid class
|
|
||||||
is used):
|
|
||||||
|
|
||||||
[[1]] If the XML contains an <<<implementation>>> hint, that is used
|
|
||||||
|
|
||||||
[[2]] If the XML tag contains a <<<.>>>, try that as a class name
|
|
||||||
|
|
||||||
[[3]] Try the XML tag as a class in the same package as the object being
|
|
||||||
configured
|
|
||||||
|
|
||||||
[[4]] For arrays, use the class of the array (for example, use <<<String>>>
|
|
||||||
for a <<<String[]>>> parameter); for collections and maps, use the
|
|
||||||
class specified in the mojo configuration for the collection or map;
|
|
||||||
use <<<String>>> for entries in a collection and values in a map
|
|
||||||
|
|
||||||
Once the type for the element is defined, the text in the XML file is
|
|
||||||
converted to the appropriate type of object
|
|
||||||
|
|
||||||
* Arrays
|
|
||||||
|
|
||||||
Array type parameters are configured by specifying the parameter multiple
|
|
||||||
times (for example, "<<< <param>value1</param> <param>value2</param> >>>").
|
|
||||||
|
|
||||||
* Collections
|
|
||||||
|
|
||||||
This category covers any class which implements <<<java.util.Collection>>>
|
|
||||||
such as <<<ArrayList>>> or <<<HashSet>>>. These parameters are configured by
|
|
||||||
specifying the parameter multiple times just like an array.
|
|
||||||
|
|
||||||
* Maps
|
|
||||||
|
|
||||||
This category covers any class which implements <<<java.util.Map>>>
|
|
||||||
such as <<<HashMap>>> but does <<not>> implement <<<java.util.Properties>>>.
|
|
||||||
These parameters are configured by including XML tags in the form
|
|
||||||
<<< <key>value</key> >>> in the parameter configuration.
|
|
||||||
|
|
||||||
* Properties
|
|
||||||
|
|
||||||
This category covers any map which implements <<<java.util.Properties>>>.
|
|
||||||
These parameters are configured by including XML tags in the form
|
|
||||||
<<< <key>value</key> >>> in the parameter configuration. \xAB<Is this
|
|
||||||
correct? The Properties converter does not use the same calls to extract
|
|
||||||
the information as the Map converter does, but it looks like it might be
|
|
||||||
accomplishing the same thing. Otherwise, it looks like the XML should be
|
|
||||||
<property name="name" value="value"/>.>\xBB
|
|
||||||
|
|
||||||
* Other Object Classes
|
|
||||||
|
|
||||||
This category covers any class which does not implement <<<java.util.Map>>>,
|
|
||||||
<<<java.util.Collection>>>, or <<<java.util.Dictionary>>>.
|
|
||||||
These parameters are configured by \xAB<how does this type of parameter
|
|
||||||
get configured? It is not clear from reading ObjectWithFieldsConverter.java>\xBB
|
|
Loading…
Reference in New Issue