Author: vsiveton
Date: Wed Aug 26 12:52:01 2009
New Revision: 807987

URL: http://svn.apache.org/viewvc?rev=807987&view=rev
Log:
o clarify plugin configuration to make the difference between build and 
reporting plugins (MJAVADOC-256)
o added more conf tips
o moved "Using Setters" part to the plugin dev

Modified:
    maven/site/trunk/src/site/apt/guides/mini/guide-configuring-plugins.apt
    
maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt

Modified: 
maven/site/trunk/src/site/apt/guides/mini/guide-configuring-plugins.apt
URL: 
http://svn.apache.org/viewvc/maven/site/trunk/src/site/apt/guides/mini/guide-configuring-plugins.apt?rev=807987&r1=807986&r2=807987&view=diff
==============================================================================
--- maven/site/trunk/src/site/apt/guides/mini/guide-configuring-plugins.apt 
(original)
+++ maven/site/trunk/src/site/apt/guides/mini/guide-configuring-plugins.apt Wed 
Aug 26 12:52:01 2009
@@ -4,7 +4,7 @@
  Jason van Zyl
  Vincent Siveton
  ------
- November 2006
+ 2009-08-26
  ------
 
 ~~ Licensed to the Apache Software Foundation (ASF) under one
@@ -29,27 +29,79 @@
 
 Guide to Configuring Plug-ins
 
-  [[1]] {{{Mapping_Complex_Objects}Mapping Complex Objects}}
+  [[1]] {{{Generic_Configuration}Generic Configuration}}
 
-  [[2]] {{{Mapping_Collections}Mapping Collections}}
+    [[1]] {{{Help_Goal}Help Goal}}
 
-    [[1]] {{{Mapping_Lists}Mapping Lists}}
+    [[2]] {{{Configuring_Parameters}Configuring Parameters}}
 
-    [[2]] {{{Mapping_Maps}Mapping Maps}}
+        [[1]] {{{Mapping_Simple_Objects}Mapping Simple Objects}}
 
-    [[3]] {{{Mapping_Properties}Mapping Properties}}
+        [[2]] {{{Mapping_Complex_Objects}Mapping Complex Objects}}
 
-  [[3]] {{{Using_Setters}Using Setters}}
+        [[3]] {{{Mapping_Collections}Mapping Collections}}
 
-  [[4]] {{{Using_the_executions_Tag}Using the <<<\<executions\>>>> Tag}}
+            [[1]] {{{Mapping_Lists}Mapping Lists}}
 
- In Maven plug-ins are configured by specifying a <<<\<configuration\>>>> 
element where the child elements of the
- <<<\<configuration\>>>> element are mapped to fields, or setters, inside your 
Mojo (remember that a plug-in consists of
+            [[2]] {{{Mapping_Maps}Mapping Maps}}
+
+            [[3]] {{{Mapping_Properties}Mapping Properties}}
+
+            []
+
+        []
+
+    []
+
+  [[2]] {{{Configuring_Build_Plugins}Configuring Build Plugins}}
+
+      [[1]] {{{Using_the_executions_Tag}Using the <<<\<executions\>>>> Tag}}
+
+      [[2]] {{{Using_the_dependencies_Tag}Using the <<<\<dependencies\>>>> 
Tag}}
+
+      [[3]] {{{Using_the_inherited_Tag_In_Build_Plugins}Using the 
<<<\<inherited\>>>> Tag In Build Plugins}}
+
+      []
+
+  [[3]] {{{Configuring_Reporting_Plugins}Configuring Reporting Plugins}}
+
+      [[1]] {{{Using_the_reportSets_Tag}Using the <<<\<reportSets\>>>> Tag}}
+
+      [[2]] {{{Using_the_inherited_Tag_In_Reporting_Plugins}Using the 
<<<\<inherited\>>>> Tag In Reporting Plugins}}
+
+      []
+
+  []
+
+* Introduction
+
+ In Maven, there are the build and the reporting plugins:
+
+  * <<Build plugins>> will be executed during the build and then, they should 
be configured in the <<<\<build/\>>>>
+  element.
+
+  * <<Reporting plugins>> will be executed during the site generation and they 
should be configured in the
+  <<<\<reporting/\>>>> element.
+
+  []
+
+  All plugins should have minimal required
+  
{{{http://maven.apache.org/ref/current/maven-model/maven.html#class_plugin}informations}}:
+  <<<groupId>>>, <<<artifactId>>> and <<<version>>>.
+
+  <<Important Note>>: it is recommended to always defined the plugin version 
to guarantee the build reproducibility. A good
+  practice is to define the default plugin version in the
+  <<<\<build\>\<pluginManagement/\>\</build\>>>> tag for each build plugin and 
in the
+  <<<\<reporting\>\<plugins/\>\</reporting\>>>> tag for each reporting plugin.
+
+* {Generic Configuration}
+
+ Maven plugins (build and reporting) are configured by specifying a 
<<<\<configuration/\>>>> element where the child elements of the
+ <<<\<configuration/\>>>> element are mapped to fields, or setters, inside 
your Mojo (remember that a plug-in consists of
  one or more Mojos where a Mojo maps to a goal). Say, for example, we had a 
Mojo that performed a query against
  a particular URL, with a specified timeout and list of options. The Mojo 
might look like the following:
 
 +----+
-
 /**
  * @goal query
  */
@@ -77,14 +129,12 @@
         ...
     }
 }
-
 +----+
 
  To configure the Mojo from your POM with the desired URL, timeout and options 
you might have something like
  the following:
 
 +----+
-
 <project>
   ...
   <build>
@@ -106,7 +156,6 @@
   </build>
   ...
 </project>
-
 +----+
 
  As you can see the elements in the configuration match the names of the 
fields in the Mojo. The configuration
@@ -117,7 +166,7 @@
  the type of the field and determining if a suitable mapping is possible.
 
   For mojos that are intended to be executed directly from the CLI, their 
parameters usually provide a means to be
-  configured via system properties instead of a <<<\<configuration\>>>> 
section in the POM. The plugin documentation
+  configured via system properties instead of a <<<\<configuration/\>>>> 
section in the POM. The plugin documentation
   for those parameters will list an <expression> that denotes the system 
properties for the configuration. In the
   mojo above, the parameter <<<url>>> is associated with the expression 
<<<$\{query.url\}>>>, meaning its value can
   be specified by the system property <<<query.url>>> as shown below:
@@ -132,23 +181,53 @@
   reasons) employ system properties which are completely unrelated to the 
parameter name. So be sure to have a close
   look at the plugin documentation.
 
-* {Mapping Complex Objects}
+** {Help Goal}
 
-  Mapping complex types is also fairly straight forward in Maven so let's look 
at a simple example where we
-  are trying to map a configuration for Person object. The 
<<<\<configuration\>>>> element might look like the
-  following:
+  Recent Maven plugins have generally an <<<help>>> goal to have in the 
command line the description of the plugin,
+  with their parameters and types. For instance, to understand the javadoc 
goal, you need to call:
 
 +----+
+mvn javadoc:help -Ddetail -Dgoal=javadoc
++----+
+
+  And you will see all parameters for the javadoc:javadoc goal, similar to this
+  
{{{http://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html}page}}.
+
+** {Configuring Parameters}
+
+*** {Mapping Simple Objects}
 
+  Mapping simple types, like Boolean or Integer, is very simple. The 
<<<\<configuration/\>>>> element might look like
+  the following:
+
++----+
 ...
 <configuration>
- <person>
-   <firstName>Jason</firstName>
-   <lastName>van Zyl</lastName>
- </person>
+  <myString>a string</myString>
+  <myBoolean>true</myBoolean>
+  <myInteger>10</myInteger>
+  <myDouble>1.0</myDouble>
+  <myFile>c:\temp</myFile>
+  <myURL>http://maven.apache.org</myURL>
 </configuration>
 ...
++----+
+
+*** {Mapping Complex Objects}
 
+  Mapping complex types is also fairly straight forward in Maven so let's look 
at a simple example where we
+  are trying to map a configuration for Person object. The 
<<<\<configuration/\>>>> element might look like the
+  following:
+
++----+
+...
+<configuration>
+  <person>
+    <firstName>Jason</firstName>
+    <lastName>van Zyl</lastName>
+  </person>
+</configuration>
+...
 +----+
 
  The rules for mapping complex objects are as follows:
@@ -168,30 +247,27 @@
  []
 
 +----+
-
 ...
 <configuration>
- <person implementation="com.mycompany.mojo.query.SuperPerson">
-   <firstName>Jason</firstName>
-   <lastName>van Zyl</lastName>
- </person>
+  <person implementation="com.mycompany.mojo.query.SuperPerson">
+    <firstName>Jason</firstName>
+    <lastName>van Zyl</lastName>
+  </person>
 </configuration>
 ...
-
 +----+
 
-* {Mapping Collections}
+*** {Mapping Collections}
 
  The configuration mapping mechanism can easily deal with most collections so 
let's go through a few examples
  to show you how it's done:
 
-** {Mapping Lists}
+**** {Mapping Lists}
 
  Mapping lists works in much the same way as mapping to arrays where you a 
list of elements will be
  mapped to the List. So if you have a mojo like the following:
 
 +----+
-
 public class MyAnimalMojo
     extends AbstractMojo
 {
@@ -206,13 +282,11 @@
         ...
     }
 }
-
 +----+
 
  Where you have a field named <<<animals>>> then your configuration for the 
plug-in would look like the following:
 
 +----+
-
 <project>
   ...
   <build>
@@ -232,12 +306,11 @@
   </build>
   ...
 </project>
-
 +----+
 
  Where each of the animals listed would be entries in the <<<animals>>> field. 
Unlike arrays, collections have no
  specific component type. In order to derive the type of a list item, the 
following strategy is used:
- 
+
   [[1]] If the XML element contains an <<<implementation>>> hint attribute, 
that is used
 
   [[2]] If the XML tag contains a <<<.>>>, try that as a fully qualified class 
name
@@ -249,7 +322,7 @@
 
   []
 
-** {Mapping Maps}
+**** {Mapping Maps}
 
  In the same way, you could define maps like the following:
 
@@ -275,7 +348,7 @@
 ...
 +-----+
 
-** {Mapping Properties}
+**** {Mapping Properties}
 
  Properties should be defined like the following:
 
@@ -307,65 +380,15 @@
 ...
 +-----+
 
-* {Using Setters}
+* {Configuring Build Plugins}
 
- You are not restricted to using private field mapping which is good if you 
are trying to make you Mojos resuable
- outside the context of Maven. Using the example above we could name our 
private fields using the underscore
- convention and provide setters that the configuration mapping mechanism can 
use. So our Mojo would look
- like the following:
+  The following is only to configure Build plugins in the <<<\<build/\>>>> 
element.
 
-+----+
-
-public class MyQueryMojo
-    extends AbstractMojo
-{
-    /**
-     * @parameter property="url"
-     */
-    private String _url;
-
-    /**
-     * @parameter property="timeout"
-     */
-    private int _timeout;
-
-    /**
-     * @parameter property="options"
-     */
-    private String[] _options;
-
-    public void setUrl( String url )
-    {
-        _url = url;
-    }
-
-    public void setTimeout( int timeout )
-    {
-        _timeout = timeout;
-    }
-
-    public void setOptions( String[] options )
-    {
-        _options = options;
-    }
-
-    public void execute()
-        throws MojoExecutionException
-    {
-        ...
-    }
-}
-
-+----+
-
- Note the specification of the property name for each parameter which tells 
Maven what setter and getter to use when
- the field's name does not match the intended name of the parameter in the 
plugin configuration.
-
-* {Using the <<<\<executions\>>>> Tag}
+** {Using the <<<\<executions/\>>>> Tag}
 
   You can also configure a mojo using the <<<\<executions\>>>> tag. This is 
most commonly used for mojos that are
-  intended to participate in some phase of the build lifecycle. Using 
<<<MyQueryMojo>>> as an example, you may have
-  something that will look like:
+  intended to participate in some phases of the 
{{{../introduction/introduction-to-the-lifecycle.html}build lifecycle}}.
+  Using <<<MyQueryMojo>>> as an example, you may have something that will look 
like:
 
 +----+
 <project>
@@ -552,3 +575,118 @@
   outside of the executions section, it will apply globally to all invocations
   of the plugin.
 
+** {Using the <<<\<dependencies/\>>>> Tag}
+
+  You could configure the dependencies of the Build plugins, commonly to use a 
more recent dependency version.
+
+  For instance, the Maven Antrun Plugin version 1.2 uses Ant version 1.6.5, if 
you want to use the latest Ant version
+  when running this plugin, you need to add <<<\<dependencies/\>>>> element 
like the following:
+
++----+
+<project>
+  ...
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <version>1.2</version>
+        ...
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant</artifactId>
+            <version>1.7.1</version>
+          </dependency>
+          <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant-launcher</artifactId>
+            <version>1.7.1</version>
+          </dependency>
+         </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+  ...
+</project>
++----+
+
+** {Using the <<<\<inherited/\>>>> Tag In Build Plugins}
+
+  By default, plugin configuration should be propagated to child POMs, so to 
break the inheritance, you could uses
+  the <<<\<inherited/\>>>> tag:
+
++----+
+<project>
+  ...
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <version>1.2</version>
+        <inherited>false</inherited>
+        ...
+      </plugin>
+    </plugins>
+  </build>
+  ...
+</project>
++----+
+
+
+* {Configuring Reporting Plugins}
+
+  The following is only to configure Reporting plugins in the 
<<<\<reporting/\>>>> element.
+
+** {Using the <<<\<reportSets/\>>>> Tag}
+
+  You can configure a reporting plugin using the <<<\<reportSets\>>>> tag. 
This is most commonly used to generate
+  reports selectively when running <<<mvn site>>>. The following will generate 
only the project team report.
+
++----+
+<project>
+  ...
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-project-info-reports-plugin</artifactId>
+        <version>2.1.2</version>
+        <reportSets>
+          <reportSet>
+            <reports>
+              <report>project-team</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+    </plugins>
+  </reporting>
+  ...
+</project>
++----+
+
+  <<Note>>: Refer to each Plugin Documentation (i.e. plugin-info.html) to know 
the available report goals.
+
+** {Using the <<<\<inherited/\>>>> Tag In Reporting Plugins}
+
+  Similar to the build plugins, to break the inheritance, you could uses the 
<<<\<inherited/\>>>> tag:
+
++----+
+<project>
+  ...
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-project-info-reports-plugin</artifactId>
+        <version>2.1.2</version>
+        <inherited>false</inherited>
+      </plugin>
+    </plugins>
+  </reporting>
+  ...
+</project>
++----+
+

Modified: 
maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt
URL: 
http://svn.apache.org/viewvc/maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt?rev=807987&r1=807986&r2=807987&view=diff
==============================================================================
--- 
maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt 
(original)
+++ 
maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt 
Wed Aug 26 12:52:01 2009
@@ -4,7 +4,7 @@
  Bob Allison
  Vincent Siveton
  ------
- January 2008
+ 2009-08-26
  ------
 
 ~~ Licensed to the Apache Software Foundation (ASF) under one
@@ -271,7 +271,7 @@
   -DarchetypeArtifactId=maven-archetype-mojo
 +---+
 
-* Parameters
+* {Parameters}
 
   It is unlikely that a mojo will be very useful without parameters.
   Parameters provide a few very important functions:
@@ -624,6 +624,59 @@
   Please see 
{{{../mini/guide-configuring-plugins.html#Mapping_Complex_Objects}Mapping 
Complex Objects}} for details
   on the strategy used to configure those kind of parameters.
 
+* Using Setters
+
+ You are not restricted to using private field mapping which is good if you 
are trying to make you Mojos resuable
+ outside the context of Maven. Using the example above we could name our 
private fields using the underscore
+ convention and provide setters that the configuration mapping mechanism can 
use. So our Mojo would look
+ like the following:
+
++----+
+
+public class MyQueryMojo
+    extends AbstractMojo
+{
+    /**
+     * @parameter property="url"
+     */
+    private String _url;
+
+    /**
+     * @parameter property="timeout"
+     */
+    private int _timeout;
+
+    /**
+     * @parameter property="options"
+     */
+    private String[] _options;
+
+    public void setUrl( String url )
+    {
+        _url = url;
+    }
+
+    public void setTimeout( int timeout )
+    {
+        _timeout = timeout;
+    }
+
+    public void setOptions( String[] options )
+    {
+        _options = options;
+    }
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        ...
+    }
+}
+
++----+
+
+ Note the specification of the property name for each parameter which tells 
Maven what setter and getter to use when
+ the field's name does not match the intended name of the parameter in the 
plugin configuration.
 
 * Resources
 


Reply via email to