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/03/01 16:53:19 UTC
svn commit: r632607 - in /maven/plugin-tools/trunk:
maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/
maven-plugin-tools-api/
maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/
maven-plugin-tools-api/src/main/...
Author: vsiveton
Date: Sat Mar 1 07:53:18 2008
New Revision: 632607
URL: http://svn.apache.org/viewvc?rev=632607&view=rev
Log:
MPLUGIN-80: Detection of report goals always fails due to class loader separation
o improved PluginUtils#isMavenReport() to take car of project classloader
o added test case
Added:
maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/
maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java (with props)
maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java (with props)
Modified:
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/XdocGeneratorMojo.java
maven/plugin-tools/trunk/maven-plugin-tools-api/pom.xml
maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java
maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java
Modified: maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java?rev=632607&r1=632606&r2=632607&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java Sat Mar 1 07:53:18 2008
@@ -219,7 +219,7 @@
File outputDir = new File( getOutputDirectory() );
outputDir.mkdirs();
- PluginXdocGenerator generator = new PluginXdocGenerator( locale );
+ PluginXdocGenerator generator = new PluginXdocGenerator( project, locale );
generator.execute( outputDir, pluginDescriptor );
}
catch ( IOException e )
@@ -289,7 +289,7 @@
{
MojoDescriptor mojo = (MojoDescriptor) i.next();
- if ( PluginUtils.isMavenReport( mojo.getImplementation() ) )
+ if ( PluginUtils.isMavenReport( mojo.getImplementation(), project ) )
{
hasMavenReport = true;
}
@@ -337,7 +337,7 @@
tableCell( createLinkPatternedText( goalName, goalDocumentationLink ) );
if ( hasMavenReport )
{
- if ( PluginUtils.isMavenReport( mojo.getImplementation() ) )
+ if ( PluginUtils.isMavenReport( mojo.getImplementation(), project ) )
{
sink.tableCell();
iconValid( locale );
Modified: maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/XdocGeneratorMojo.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/XdocGeneratorMojo.java?rev=632607&r1=632606&r2=632607&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/XdocGeneratorMojo.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/XdocGeneratorMojo.java Sat Mar 1 07:53:18 2008
@@ -51,6 +51,6 @@
/** {@inheritDoc} */
protected Generator createGenerator()
{
- return new PluginXdocGenerator();
+ return new PluginXdocGenerator( project );
}
}
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/pom.xml?rev=632607&r1=632606&r2=632607&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/pom.xml (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/pom.xml Sat Mar 1 07:53:18 2008
@@ -76,5 +76,25 @@
<artifactId>jtidy</artifactId>
<version>4aug2000r7-dev</version>
</dependency>
+
+ <!-- test -->
+ <dependency>
+ <groupId>org.apache.maven.reporting</groupId>
+ <artifactId>maven-reporting-impl</artifactId>
+ <version>2.0.4</version>
+ <scope>test</scope>
+ <exclusions>
+ <!-- Using org.codehaus.plexus:plexus-utils instead of -->
+ <exclusion>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java?rev=632607&r1=632606&r2=632607&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java Sat Mar 1 07:53:18 2008
@@ -35,6 +35,7 @@
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
import org.apache.maven.tools.plugin.util.PluginUtils;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.StringInputStream;
@@ -53,19 +54,35 @@
{
private final Locale locale;
+ private final MavenProject project;
+
/**
* Default constructor using <code>Locale.ENGLISH</code> as locale.
+ * Used only in test cases.
*/
public PluginXdocGenerator()
{
+ this.project = null;
+ this.locale = Locale.ENGLISH;
+ }
+
+ /**
+ * Constructor using <code>Locale.ENGLISH</code> as locale.
+ *
+ * @param project not null Maven project.
+ */
+ public PluginXdocGenerator( MavenProject project )
+ {
+ this.project = project;
this.locale = Locale.ENGLISH;
}
/**
* @param locale not null wanted locale.
*/
- public PluginXdocGenerator( Locale locale )
+ public PluginXdocGenerator( MavenProject project, Locale locale )
{
+ this.project = project;
if ( locale == null )
{
this.locale = Locale.ENGLISH;
@@ -182,7 +199,7 @@
private void writeReportNotice( MojoDescriptor mojoDescriptor, XMLWriter w )
{
- if ( PluginUtils.isMavenReport( mojoDescriptor.getImplementation() ) )
+ if ( PluginUtils.isMavenReport( mojoDescriptor.getImplementation(), project ) )
{
w.startElement( "p" );
w.writeMarkup( "<strong>" + getBundle( locale ).getString( "pluginxdoc.mojodescriptor.notice.note" )
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java?rev=632607&r1=632606&r2=632607&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java Sat Mar 1 07:53:18 2008
@@ -19,12 +19,19 @@
* under the License.
*/
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.MavenReport;
import org.codehaus.plexus.component.repository.ComponentDependency;
import org.codehaus.plexus.util.DirectoryScanner;
@@ -153,37 +160,61 @@
}
/**
- * @param impl a Mojo implementation
+ * @param impl a Mojo implementation, not null
+ * @param project a MavenProject instance, could be null
* @return <code>true</code> is the Mojo implementation implements <code>MavenReport</code>,
* <code>false</code> otherwise.
+ * @throws IllegalArgumentException if any
*/
- public static boolean isMavenReport( String impl )
+ public static boolean isMavenReport( String impl, MavenProject project )
{
if ( impl == null )
{
throw new IllegalArgumentException( "mojo implementation should be declared" );
}
- Object mojo = null;
- try
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ if ( project != null )
{
- Class clazz = Class.forName( impl );
- mojo = clazz.newInstance();
- }
- catch ( ClassNotFoundException e )
- {
- return false;
+ List classPathStrings;
+ try
+ {
+ classPathStrings = project.getCompileClasspathElements();
+ }
+ catch ( DependencyResolutionRequiredException e )
+ {
+ throw new IllegalArgumentException( e );
+ }
+
+ List urls = new ArrayList( classPathStrings.size() );
+ for ( Iterator it = classPathStrings.iterator(); it.hasNext(); )
+ {
+ try
+ {
+ urls.add( new File( ( (String) it.next() ) ).toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new IllegalArgumentException( e );
+ }
+ }
+
+ URLClassLoader projectClassLoader = new URLClassLoader( (URL[]) urls.toArray( new URL[urls.size()] ),
+ classLoader );
+ classLoader = projectClassLoader;
}
- catch ( InstantiationException e )
+
+ Class clazz = null;
+ try
{
- return false;
+ clazz = Class.forName( impl, false, classLoader );
}
- catch ( IllegalAccessException e )
+ catch ( ClassNotFoundException e )
{
return false;
}
- if ( ( mojo != null ) && ( mojo instanceof MavenReport ) )
+ if ( MavenReport.class.isAssignableFrom( clazz ) )
{
return true;
}
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java?rev=632607&r1=632606&r2=632607&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java Sat Mar 1 07:53:18 2008
@@ -19,8 +19,9 @@
* under the License.
*/
-import junit.framework.TestCase;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
import org.codehaus.plexus.component.repository.ComponentDependency;
import org.codehaus.plexus.util.xml.CompactXMLWriter;
import org.codehaus.plexus.util.xml.XMLWriter;
@@ -32,9 +33,8 @@
* @author jdcasey
*/
public class PluginUtilsTest
- extends TestCase
+ extends AbstractMojoTestCase
{
-
public void testShouldTrimArtifactIdToFindPluginId()
{
assertEquals( "artifactId", PluginDescriptor.getGoalPrefixFromArtifactId( "maven-artifactId-plugin" ) );
@@ -64,9 +64,9 @@
String output = sWriter.toString();
- String pattern = "<dependencies>" + "<dependency>" + "<groupId>testGroupId</groupId>" +
- "<artifactId>testArtifactId</artifactId>" + "<type>pom</type>" + "<version>0.0.0</version>" +
- "</dependency>" + "</dependencies>";
+ String pattern = "<dependencies>" + "<dependency>" + "<groupId>testGroupId</groupId>"
+ + "<artifactId>testArtifactId</artifactId>" + "<type>pom</type>" + "<version>0.0.0</version>"
+ + "</dependency>" + "</dependencies>";
assertEquals( pattern, output );
}
@@ -96,4 +96,26 @@
assertEquals( 1, files.length );
}
+ public void testIsMavenReport()
+ throws Exception
+ {
+ try
+ {
+ PluginUtils.isMavenReport( null, null );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ assertTrue( true );
+ }
+
+ String impl = "org.apache.maven.tools.plugin.util.stubs.MavenReportStub";
+
+ MavenProjectStub stub = new MavenProjectStub();
+ stub.setCompileSourceRoots( Collections.singletonList( getBasedir() + "/target/classes" ) );
+
+ assertTrue( PluginUtils.isMavenReport( impl, stub ) );
+
+ impl = "org.apache.maven.tools.plugin.util.stubs.MojoStub";
+ assertFalse( PluginUtils.isMavenReport( impl, stub ) );
+ }
}
Added: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java?rev=632607&view=auto
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java (added)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java Sat Mar 1 07:53:18 2008
@@ -0,0 +1,197 @@
+package org.apache.maven.tools.plugin.util.stubs;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+import java.io.File;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.doxia.sink.Sink;
+
+/**
+ * Dummy report.
+ *
+ * @goal dummyReport
+ * @version $Id$
+ */
+public class MavenReportStub
+ extends AbstractMavenReport
+{
+ /** {@inheritDoc} */
+ public boolean canGenerateReport()
+ {
+ return super.canGenerateReport();
+ }
+
+ /** {@inheritDoc} */
+ protected void closeReport()
+ {
+ super.closeReport();
+ }
+
+ /** {@inheritDoc} */
+ public void execute()
+ throws MojoExecutionException
+ {
+ super.execute();
+ }
+
+ /** {@inheritDoc} */
+ protected void executeReport( Locale locale )
+ throws MavenReportException
+ {
+
+ }
+
+ /** {@inheritDoc} */
+ public void generate( Sink sink, Locale locale )
+ throws MavenReportException
+ {
+ super.generate( sink, locale );
+ }
+
+ /** {@inheritDoc} */
+ public String getCategoryName()
+ {
+ return super.getCategoryName();
+ }
+
+ /** {@inheritDoc} */
+ protected String getOutputDirectory()
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ protected MavenProject getProject()
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public File getReportOutputDirectory()
+ {
+ return super.getReportOutputDirectory();
+ }
+
+ /** {@inheritDoc} */
+ public org.apache.maven.doxia.sink.Sink getSink()
+ {
+ return super.getSink();
+ }
+
+ /** {@inheritDoc} */
+ protected Renderer getSiteRenderer()
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public boolean isExternalReport()
+ {
+ return super.isExternalReport();
+ }
+
+ /** {@inheritDoc} */
+ public void setReportOutputDirectory( File reportOutputDirectory )
+ {
+ super.setReportOutputDirectory( reportOutputDirectory );
+ }
+
+ /** {@inheritDoc} */
+ public Log getLog()
+ {
+ return super.getLog();
+ }
+
+ /** {@inheritDoc} */
+ public Map getPluginContext()
+ {
+ return super.getPluginContext();
+ }
+
+ /** {@inheritDoc} */
+ public void setLog( Log log )
+ {
+ super.setLog( log );
+ }
+
+ /** {@inheritDoc} */
+ public void setPluginContext( Map pluginContext )
+ {
+ super.setPluginContext( pluginContext );
+ }
+
+ /** {@inheritDoc} */
+ public String getDescription( Locale locale )
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public String getName( Locale locale )
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public String getOutputName()
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ protected Object clone()
+ throws CloneNotSupportedException
+ {
+ return super.clone();
+ }
+
+ /** {@inheritDoc} */
+ public boolean equals( Object obj )
+ {
+ return super.equals( obj );
+ }
+
+ /** {@inheritDoc} */
+ protected void finalize()
+ throws Throwable
+ {
+ super.finalize();
+ }
+
+ /** {@inheritDoc} */
+ public int hashCode()
+ {
+ return super.hashCode();
+ }
+
+ /** {@inheritDoc} */
+ public String toString()
+ {
+ return super.toString();
+ }
+}
Propchange: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MavenReportStub.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java?rev=632607&view=auto
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java (added)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java Sat Mar 1 07:53:18 2008
@@ -0,0 +1,100 @@
+package org.apache.maven.tools.plugin.util.stubs;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * Dummy Mojo.
+ *
+ * @goal dummy
+ * @version $Id$
+ */
+public class MojoStub
+ extends AbstractMojo
+{
+ /** {@inheritDoc} */
+ public Log getLog()
+ {
+ return super.getLog();
+ }
+
+ /** {@inheritDoc} */
+ public Map getPluginContext()
+ {
+ return super.getPluginContext();
+ }
+
+ /** {@inheritDoc} */
+ public void setLog( Log log )
+ {
+ super.setLog( log );
+ }
+
+ /** {@inheritDoc} */
+ public void setPluginContext( Map pluginContext )
+ {
+ super.setPluginContext( pluginContext );
+ }
+
+ /** {@inheritDoc} */
+ protected Object clone()
+ throws CloneNotSupportedException
+ {
+ return super.clone();
+ }
+
+ /** {@inheritDoc} */
+ public boolean equals( Object obj )
+ {
+ return super.equals( obj );
+ }
+
+ /** {@inheritDoc} */
+ protected void finalize()
+ throws Throwable
+ {
+ super.finalize();
+ }
+
+ /** {@inheritDoc} */
+ public int hashCode()
+ {
+ return super.hashCode();
+ }
+
+ /** {@inheritDoc} */
+ public String toString()
+ {
+ return super.toString();
+ }
+
+ /** {@inheritDoc} */
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+
+ }
+}
Propchange: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"