Author: vsiveton
Date: Sat Jan 5 05:03:38 2008
New Revision: 609135
URL: http://svn.apache.org/viewvc?rev=609135&view=rev
Log:
MNG-3273: Point out known pitfalls when developing plugins
o added some pitfalls proposed by Benjamin Bentmann
Modified:
maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt
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=609135&r1=609134&r2=609135&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
Sat Jan 5 05:03:38 2008
@@ -4,7 +4,7 @@
Bob Allison
Vincent Siveton
------
- November 2006
+ January 2008
------
~~ Licensed to the Apache Software Foundation (ASF) under one
@@ -95,11 +95,17 @@
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.
+ []
+
+ All Mojo annotations are described
{{{../../developers/mojo-api-specification.html#The_Descriptor_and_Annotations}here}}.
+
** Project Definition
Once the mojos have been written for the plugin, it is time to
@@ -142,7 +148,7 @@
** Build Goals
- There are a few goals which are defined with the Maven plugin
+ There are few goals which are defined with the Maven plugin
packaging as part of a standard build lifecycle:
*-------------+----------------------------------------------------+
@@ -291,6 +297,8 @@
* 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
@@ -631,8 +639,63 @@
<myObject>test</myObject>
+-----+
+* Some Pitfalls
+
+ The following is some subtle anti-patterns that plugin developers should
avoid or take care.
+
+** Defining Logger Field
+
+ Defining a <<<logger>>> field in your Mojo like the following is bad:
+
++-----+
+public MyMojo extends AbstractMojo
+{
+ private Log log = getLog();
+
+ public void execute() throws MojoExecutionException
+ {
+ log.debug( "..." );
+ }
+}
++-----+
+
+ <<Explanation>>: Getting the logger this way will retrieve some default
logger instead of the logger that is injected into the mojo by the plexus
container.
+ This is easily noticed by the different output styles of the log messages and
the fact that one gets [debug] message without having "-X" enabled.
+
+** Using Relative File Path Parameter
+
+ Defining a relative file path parameter could be dangerous:
+
++-----+
+public MyMojo extends AbstractMojo
+{
+ /**
+ * This parameter will take a file path (file paths are
platform-dependent...)
+ *
+ * @parameter
+ */
+ private String outputDirectory;
+
+ public void execute() throws MojoExecutionException
+ {
+ File outputDir = new File( outputDirectory ).getAbsoluteFile();
+ outputDir.mkdirs();
+ }
+}
++-----+
+
+ <<Explanation>>: <<<java.io.File>>> resolves relative paths (i.e.
outputDirectory = "target/something" ) against the current directory
+ which is the project base directory (i.e. outputDir =
"${basedir}/target/something"). Therefore, specific path parameters should be
declared
+ of type <<<java.io.File>>> rather than simple strings: Maven should
automatically push in properly resolved paths into the mojo.
+
* Resources
- [[1]] {{{../../developers/mojo-api-specification.html}Mojo API
specification}}
+ [[1]] {{{../../developers/mojo-api-specification.html}Mojo
Documentation}}: Mojo API, Mojo annotations
+
+ [[2]]
{{{http://maven.apache.org/shared/maven-plugin-testing-harness/}Maven Plugin
Testing Harness}}: Testing framework for your Mojos.
+
+ [[3]] {{{http://plexus.codehaus.org/}Plexus}}: The IoC container used by
Maven.
+
+ [[4]] {{{http://plexus.codehaus.org/plexus-utils/}Plexus Common
Utilities}}: Set of utilities classes useful for Mojo development.
- [[2]]
{{{http://maven.apache.org/shared/maven-plugin-testing-harness/}Maven-plugin-testing-harness}}
+ []