You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vs...@apache.org on 2008/02/07 03:52:47 UTC

svn commit: r619243 - /maven/site/trunk/src/site/apt/guides/plugin/guide-java-plugin-development.apt

Author: vsiveton
Date: Wed Feb  6 18:52:45 2008
New Revision: 619243

URL: http://svn.apache.org/viewvc?rev=619243&view=rev
Log:
MNG-3273: Point out known pitfalls when developing plugins
Submitted by: Benjamin Bentmann
Reviewed by: Vincent Siveton

o applied

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=619243&r1=619242&r2=619243&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 Feb  6 18:52:45 2008
@@ -715,6 +715,48 @@
   Therefore, always provide a dedicated bundle for the default locale of your bundle family (e.g. <<<mymojo-report_en.properties>>>). This
   bundle should be empty such that it retrieves strings via the parent chain from the base bundle.
 
+** Getting the Output Directory for a Report Mojo
+
+ A report mojo that subclasses <<<AbstractReportMojo>>> needs to implement <<<AbstractReportMojo.getOutputDirectory()>>>. This method
+ should <never> be called during the generation of the report, i.e. the code shown below is buggy:
+
++-----+
+public MyReportMojo extends AbstractReportMojo
+{
+    /**
+     * The base directory of the report output. Only relevant if the mojo is not run as part of a site generation.
+     *
+     * @parameter expression="${project.reporting.outputDirectory}"
+     */
+    private File outputDirectory;
+
+    /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
+     */
+    protected String getOutputDirectory()
+    {
+        return outputDirectory.toString();
+    }
+
+    /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#executeReport( java.util.Locale )
+     */
+    public void executeReport( Locale locale )
+    {
+        // will fail during a site generation
+        File outputFile = new File( getOutputDirectory(), "summary.txt" );
+    }
+}
++-----+
+
+  <<Explanation>>: There are in principal two situations in which a report mojo could be invoked. The mojo might be run
+  directly from the command line or it might be run indirectly as part of the site generation along with other report mojos.
+  The glaring difference between these two invocations is the way the output directory is controlled. In the first case,
+  the parameter <<<outputDirectory>>> from the mojo itself is used. In the second case however, the Maven Site Plugin
+  will set the output directory according to its own configuration by calling <<<MavenReport.setReportOutputDirectory()>>>
+  on the reports being generated. Therefore, developers should always use <<<MavenReport.getReportOutputDirectory()>>> if they
+  need to query the effective output directory for the report. 
+
 * Resources
 
     [[1]] {{{../../developers/mojo-api-specification.html}Mojo Documentation}}: Mojo API, Mojo annotations