You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2005/10/12 22:15:51 UTC
svn commit: r315022 - in
/maven/components/trunk/maven-plugins/maven-projecthelp-plugin: pom.xml
src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
Author: jdcasey
Date: Wed Oct 12 13:15:45 2005
New Revision: 315022
URL: http://svn.apache.org/viewcvs?rev=315022&view=rev
Log:
Resolving: MNG-698, MNG-1081
Describe mojo is finished. Just need to finish documenting the projecthelp plugin.
Modified:
maven/components/trunk/maven-plugins/maven-projecthelp-plugin/pom.xml
maven/components/trunk/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
Modified: maven/components/trunk/maven-plugins/maven-projecthelp-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-projecthelp-plugin/pom.xml?rev=315022&r1=315021&r2=315022&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-projecthelp-plugin/pom.xml (original)
+++ maven/components/trunk/maven-plugins/maven-projecthelp-plugin/pom.xml Wed Oct 12 13:15:45 2005
@@ -11,6 +11,14 @@
<version>2.0-beta-2-SNAPSHOT</version>
<inceptionYear>2001</inceptionYear>
+ <description>
+ Provides mojos aimed at helping the user to make sense out of
+ the build environment. It includes mojos to view the effective
+ POM and settings files, after inheritance and active profiles
+ have been applied, as well as a 'describe' mojo to give the
+ user information about how to use a plugin.
+ </description>
+
<prerequisites>
<maven>2.0-beta-4-SNAPSHOT</maven>
</prerequisites>
Modified: maven/components/trunk/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java?rev=315022&r1=315021&r2=315022&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java (original)
+++ maven/components/trunk/maven-plugins/maven-projecthelp-plugin/src/main/java/org/apache/maven/plugins/projecthelp/DescribeMojo.java Wed Oct 12 13:15:45 2005
@@ -11,10 +11,14 @@
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.plugin.PluginManagerException;
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.plugin.version.PluginVersionResolutionException;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.component.repository.ComponentRequirement;
import java.io.File;
import java.io.FileWriter;
@@ -24,7 +28,10 @@
import java.util.List;
/**
+ * Describes the attributes of a plugin and/or plugin mojo.
+ *
* @goal describe
+ * @requiresProject false
* @aggregator
*/
public class DescribeMojo
@@ -32,43 +39,91 @@
{
/**
- * @parameter expression="${plugin}"
+ * The plugin/mojo to describe. This must be specified in one of three ways:
+ *
+ * 1. plugin-prefix
+ * 2. groupId:artifactId
+ * 3. groupId:artifactId:version
+ *
+ * @parameter expression="${plugin}" alias="prefix"
*/
private String plugin;
/**
- * @parameter
+ * The plugin groupId to describe.
+ * <br/>
+ * (Used with artifactId specification).
+ *
+ * @parameter expression="${groupId}"
*/
private String groupId;
/**
- * @parameter
+ * The plugin artifactId to describe.
+ * <br/>
+ * (Used with groupId specification).
+ *
+ * @parameter expression="${artifactId}"
*/
private String artifactId;
/**
- * @parameter
+ * The plugin version to describe.
+ * <br/>
+ * (Used with groupId/artifactId specification).
+ *
+ * @parameter expression="${version}"
*/
private String version;
/**
- * @parameter
+ * The goal name of a mojo to describe within the specified plugin.
+ * <br/>
+ * If this parameter is specified, only the corresponding mojo will
+ * <br/>
+ * be described, rather than the whole plugin.
+ *
+ * @parameter expression="${mojo}"
*/
private String mojo;
/**
+ * The plugin manager instance used to resolve plugin descriptors.
+ *
* @component role="org.apache.maven.plugin.PluginManager"
*/
private PluginManager pluginManager;
/**
+ * The project builder instance used to retrieve the super-project instance
+ * <br/>
+ * in the event there is no current MavenProject instance. Some MavenProject
+ * <br/>
+ * instance has to be present to use in the plugin manager APIs.
+ *
+ * @component role="org.apache.maven.project.MavenProjectBuilder"
+ */
+ private MavenProjectBuilder projectBuilder;
+
+ /**
+ * The current project, if there is one. This is listed as optional, since
+ * <br/>
+ * the projecthelp plugin should be able to function on its own. If this
+ * <br/>
+ * parameter is empty at execution time, this mojo will instead use the
+ * <br/>
+ * super-project.
+ *
* @parameter expression="${project}"
- * @required
* @readonly
*/
private MavenProject project;
/**
+ * The current user system settings for use in Maven. This is used for
+ * <br/>
+ * plugin manager API calls.
+ *
* @parameter expression="${settings}"
* @required
* @readonly
@@ -76,6 +131,10 @@
private Settings settings;
/**
+ * The current build session instance. This is used for
+ * <br/>
+ * plugin manager API calls.
+ *
* @parameter expression="${session}"
* @required
* @readonly
@@ -83,6 +142,10 @@
private MavenSession session;
/**
+ * The local repository ArtifactRepository instance. This is used
+ * <br/>
+ * for plugin manager API calls.
+ *
* @parameter expression="${localRepository}"
* @required
* @readonly
@@ -90,13 +153,38 @@
private ArtifactRepository localRepository;
/**
- * @parameter
+ * If specified, this parameter will cause the plugin/mojo descriptions
+ * <br/>
+ * to be written to the path specified, instead of writing to the console.
+ *
+ * @parameter expression="${output}"
*/
private File output;
+
+ /**
+ * This flag specifies that full (verbose) information should be
+ * <br/>
+ * given. Use true/false.
+ *
+ * @parameter expression="${full}" default-value="false"
+ */
+ private boolean full;
public void execute()
throws MojoExecutionException, MojoFailureException
{
+ if ( project == null )
+ {
+ try
+ {
+ project = projectBuilder.buildStandaloneSuperProject( localRepository );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw new MojoExecutionException( "Error while retrieving the super-project.", e );
+ }
+ }
+
PluginInfo pi = new PluginInfo();
parsePluginLookupInfo( pi );
@@ -148,6 +236,8 @@
}
}
}
+
+ getLog().info( "Wrote descriptions to: " + output );
}
else
{
@@ -275,42 +365,91 @@
private void describePlugin( PluginDescriptor pd, StringBuffer buffer )
{
- buffer.append( "Plugin: \'" ).append( pd.getName() ).append( '\'' );
+ String name = pd.getName();
+ if ( name == null )
+ {
+ name = pd.getId();
+ }
+
+ buffer.append( "Plugin: \'" ).append( name ).append( '\'' );
buffer.append( "\n-----------------------------------------------" );
buffer.append( "\nGroup Id: " ).append( pd.getGroupId() );
buffer.append( "\nArtifact Id: " ).append( pd.getArtifactId() );
buffer.append( "\nVersion: " ).append( pd.getVersion() );
buffer.append( "\nGoal Prefix: " ).append( pd.getGoalPrefix() );
- buffer.append( "\nDescription:\n\n" ).append( pd.getDescription() ).append( "\n" );
- buffer.append( "\nMojos:\n" );
-
- for ( Iterator it = pd.getMojos().iterator(); it.hasNext(); )
+
+ buffer.append( "\nDescription:\n\n" );
+ prettyAppend( formatDescription( pd.getDescription() ), buffer );
+ buffer.append( "\n" );
+
+ if ( full )
{
- MojoDescriptor md = (MojoDescriptor) it.next();
+ buffer.append( "\nMojos:\n" );
- buffer.append( "\nGoal: \'" ).append( md.getGoal() ).append( '\'' );
- buffer.append( "\n========================================" );
-
- describeMojoGuts( md, buffer );
+ String line = "\n===============================================";
- buffer.append( "\n\n" );
+ for ( Iterator it = pd.getMojos().iterator(); it.hasNext(); )
+ {
+ MojoDescriptor md = (MojoDescriptor) it.next();
+
+ buffer.append( line );
+ buffer.append( "\nGoal: \'" ).append( md.getGoal() ).append( '\'' );
+ buffer.append( line );
+
+ describeMojoGuts( md, buffer, true );
+
+ buffer.append( line );
+ buffer.append( "\n\n" );
+ }
+ }
+ }
+
+ private String formatDescription( String description )
+ {
+ if ( description == null )
+ {
+ return null;
+ }
+
+ String result = description.replaceAll( " ?\\<br\\/?\\> ?", "\n" );
+
+ result = result.replaceAll(" ?\\<p\\> ?", "" );
+ result = result.replaceAll(" ?\\</p\\> ?", "\n\n" );
+
+ return result;
+ }
+
+ private void prettyAppend( String messagePart, StringBuffer buffer )
+ {
+ if ( messagePart != null && messagePart.length() > 0 )
+ {
+ buffer.append( messagePart );
+ }
+ else
+ {
+ buffer.append( "Unknown" );
}
}
private void describeMojo( MojoDescriptor md, StringBuffer buffer )
{
+ String line = "\n===============================================";
+
buffer.append( "Mojo: \'" ).append( md.getFullGoalName() ).append( '\'' );
- buffer.append( "\n-----------------------------------------------" );
+ buffer.append( line );
buffer.append( "\nGoal: \'" ).append( md.getGoal() ).append( "\'" );
- describeMojoGuts( md, buffer );
+ describeMojoGuts( md, buffer, full );
+ buffer.append( line );
buffer.append( "\n\n" );
}
- private void describeMojoGuts( MojoDescriptor md, StringBuffer buffer )
+ private void describeMojoGuts( MojoDescriptor md, StringBuffer buffer, boolean fullDescription )
{
- buffer.append( "\nDescription:\n\n" ).append( md.getDescription() ).append( "\n" );
+ buffer.append( "\nDescription:\n\n" );
+ prettyAppend( formatDescription( md.getDescription() ), buffer );
+ buffer.append( "\n" );
String deprecation = md.getDeprecated();
@@ -319,42 +458,151 @@
buffer.append( "\n\nNOTE: This mojo is deprecated.\n" ).append( deprecation ).append( "\n" );
}
- buffer.append( "\nImplementation: " ).append( md.getImplementation() );
- buffer.append( "\nLanguage: " ).append( md.getLanguage() );
-
- String phase = md.getPhase();
- if ( phase != null )
+ if ( fullDescription )
{
- buffer.append( "\nBound to Phase: " ).append( phase );
+ buffer.append( "\nImplementation: " ).append( md.getImplementation() );
+ buffer.append( "\nLanguage: " ).append( md.getLanguage() );
+
+ String phase = md.getPhase();
+ if ( phase != null )
+ {
+ buffer.append( "\nBound to Phase: " ).append( phase );
+ }
+
+ String eGoal = md.getExecuteGoal();
+ String eLife = md.getExecuteLifecycle();
+ String ePhase = md.getExecutePhase();
+
+ if ( eGoal != null || ePhase != null )
+ {
+ buffer.append( "\n\nBefore this mojo executes, it will call:\n" );
+
+ if ( eGoal != null )
+ {
+ buffer.append( "\nSingle mojo: \'" ).append( eGoal ).append( "\'" );
+ }
+
+ if ( ePhase != null )
+ {
+ buffer.append( "\nPhase: \'" ).append( ePhase ).append( "\'" );
+
+ if ( eLife != null )
+ {
+ buffer.append( " in Lifecycle Overlay: \'" ).append( eLife ).append( "\'" );
+ }
+ }
+ }
+
+ describeMojoParameters( md, buffer );
+
+ describeMojoRequirements( md, buffer );
}
+ }
+
+ private void describeMojoRequirements( MojoDescriptor md, StringBuffer buffer )
+ {
+ buffer.append( "\n" );
- String eGoal = md.getExecuteGoal();
- String eLife = md.getExecuteLifecycle();
- String ePhase = md.getExecutePhase();
+ List reqs = md.getRequirements();
- if ( eGoal != null || ePhase != null )
+ if ( reqs == null || reqs.isEmpty() )
+ {
+ buffer.append( "\nThis mojo doesn't have any component requirements." );
+ }
+ else
{
- buffer.append( "\n\nBefore this mojo executes, it will call:\n" );
+ buffer.append( "\nComponent Requirements:\n" );
- if ( eGoal != null )
- {
- buffer.append( "\nSingle mojo: \'" ).append( eGoal ).append( "\'" );
- }
+ String line = "\n-----------------------------------------------";
- if ( ePhase != null )
+ int idx = 0;
+ for ( Iterator it = reqs.iterator(); it.hasNext(); )
{
- buffer.append( "\nPhase: \'" ).append( ePhase ).append( "\'" );
+ ComponentRequirement req = (ComponentRequirement) it.next();
- if ( eLife != null )
+ buffer.append( line );
+
+ buffer.append( "\n[" ).append( idx++ ).append( "] " );
+ buffer.append( "Role: " ).append( req.getRole() );
+
+ String hint = req.getRoleHint();
+ if ( hint != null )
{
- buffer.append( " in Lifecycle Overlay: \'" ).append( eLife ).append( "\'" );
+ buffer.append( "\nRole-Hint: " ).append( hint );
}
+
+ buffer.append( "\n" );
}
+
+ buffer.append( line );
}
+ }
+
+ private void describeMojoParameters( MojoDescriptor md, StringBuffer buffer )
+ {
+ buffer.append( "\n" );
- List parameters = md.getParameters();
+ List params = md.getParameters();
- List requirements = md.getRequirements();
+ if ( params == null || params.isEmpty() )
+ {
+ buffer.append( "\nThis mojo doesn't use any parameters." );
+ }
+ else
+ {
+ buffer.append( "\nParameters:" );
+
+ String line = "\n-----------------------------------------------";
+
+ int idx = 0;
+ for ( Iterator it = params.iterator(); it.hasNext(); )
+ {
+ Parameter parameter = (Parameter) it.next();
+
+ buffer.append( line );
+ buffer.append( "\n\n[" ).append( idx++ ).append( "] " );
+ buffer.append( "Name: " );
+ prettyAppend( parameter.getName(), buffer );
+
+ String alias = parameter.getAlias();
+ if ( alias != null )
+ {
+ buffer.append( " (Alias: " ).append( alias ).append( ")" );
+ }
+
+ buffer.append( "\nType: " );
+ prettyAppend( parameter.getType(), buffer );
+
+ String expression = parameter.getExpression();
+ if ( expression != null )
+ {
+ buffer.append( "\nExpression: " ).append( expression );
+ }
+
+ String defaultVal = parameter.getDefaultValue();
+ if ( defaultVal != null )
+ {
+ buffer.append( "\nDefault value: \'" ).append( defaultVal );
+ }
+
+ buffer.append( "\nRequired: " ).append( parameter.isRequired() );
+ buffer.append( "\nDirectly editable: " ).append( parameter.isEditable() );
+
+ buffer.append( "\nDescription:\n\n" );
+ prettyAppend( formatDescription( parameter.getDescription() ), buffer );
+
+ String deprecation = parameter.getDeprecated();
+
+ if ( deprecation != null )
+ {
+ buffer.append( "\n\nNOTE: This parameter is deprecated.\n" ).append( deprecation ).append( "\n" );
+ }
+
+ buffer.append( "\n" );
+ }
+
+ buffer.append( line );
+ }
}
public final String getPlugin()