You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gb...@apache.org on 2016/11/11 17:13:14 UTC

svn commit: r1769319 [2/3] - in /maven/plugins/trunk/maven-help-plugin: ./ src/it/active-profiles/ src/it/active-profiles_multimodule/ src/it/active-profiles_multimodule/module/ src/it/all-profiles/ src/it/describe-cmd-invalid/ src/it/describe-cmd-with...

Modified: maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/DescribeMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/DescribeMojo.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/DescribeMojo.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/DescribeMojo.java Fri Nov 11 17:13:13 2016
@@ -19,8 +19,6 @@ package org.apache.maven.plugins.help;
  * under the License.
  */
 
-import static org.apache.maven.plugins.help.HelpUtil.LS;
-
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
@@ -28,47 +26,39 @@ import java.lang.reflect.Method;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.lifecycle.DefaultLifecycleExecutor;
+import org.apache.maven.lifecycle.DefaultLifecycles;
 import org.apache.maven.lifecycle.Lifecycle;
-import org.apache.maven.lifecycle.LifecycleExecutionException;
-import org.apache.maven.lifecycle.LifecycleExecutor;
+import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
 import org.apache.maven.lifecycle.mapping.LifecycleMapping;
 import org.apache.maven.model.Plugin;
-import org.apache.maven.plugin.InvalidPluginException;
+import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.PluginManager;
-import org.apache.maven.plugin.PluginManagerException;
-import org.apache.maven.plugin.PluginNotFoundException;
 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.PluginVersionNotFoundException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.plugin.version.PluginVersionResult;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.reporting.MavenReport;
+import org.apache.maven.reporting.exec.MavenPluginManagerHelper;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
+import org.apache.maven.tools.plugin.generator.GeneratorUtils;
 import org.apache.maven.tools.plugin.util.PluginUtils;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -107,36 +97,36 @@ public class DescribeMojo
     // ----------------------------------------------------------------------
     // Mojo components
     // ----------------------------------------------------------------------
-
+    
     /**
-     * Maven Artifact Factory component.
-     *
-     * @since 2.1
+     * Component used to get a plugin descriptor from a given plugin.
      */
     @Component
-    private ArtifactFactory artifactFactory;
+    private MavenPluginManagerHelper pluginManager;
     
     /**
-     * Maven Artifact Resolver component.
-     *
-     * @since 2.2.1
+     * Component used to get a plugin by its prefix and get mojo descriptors.
      */
     @Component
-    private ArtifactResolver artifactResolver;
-
+    private MojoDescriptorCreator mojoDescriptorCreator;
+    
     /**
-     * The Plugin manager instance used to resolve Plugin descriptors.
+     * Component used to resolve the version for a plugin.
      */
-    @Component( role = PluginManager.class )
-    private PluginManager pluginManager;
-
+    @Component
+    private PluginVersionResolver pluginVersionResolver;
+    
     /**
-     * The project builder instance used to retrieve the super-project instance
-     * in the event there is no current MavenProject instance. Some MavenProject
-     * instance has to be present to use in the plugin manager APIs.
+     * The Maven default built-in lifecycles.
      */
-    @Component( role = MavenProjectBuilder.class )
-    private MavenProjectBuilder projectBuilder;
+    @Component
+    private DefaultLifecycles defaultLifecycles;
+    
+    /**
+     * A map from each packaging to its lifecycle mapping.
+     */
+    @Component
+    private Map<String, LifecycleMapping> lifecycleMappings;
 
     // ----------------------------------------------------------------------
     // Mojo parameters
@@ -152,30 +142,6 @@ public class DescribeMojo
     private MavenProject project;
 
     /**
-     * The current build session instance. This is used for
-     * plugin manager API calls.
-     */
-    @org.apache.maven.plugins.annotations.Parameter( defaultValue = "${session}", readonly = true, required = true )
-    private MavenSession session;
-
-    /**
-     * The local repository ArtifactRepository instance. This is used
-     * for plugin manager API calls.
-     */
-    @org.apache.maven.plugins.annotations.Parameter( defaultValue = "${localRepository}", required = true,
-                    readonly = true )
-    private ArtifactRepository localRepository;
-
-    /**
-     * Remote repositories used for the project.
-     *
-     * @since 2.1
-     */
-    @org.apache.maven.plugins.annotations.Parameter( defaultValue = "${project.remoteArtifactRepositories}",
-                    required = true, readonly = true )
-    private List<ArtifactRepository> remoteRepositories;
-
-    /**
      * The Maven Plugin to describe. This must be specified in one of three ways:
      * <br/>
      * <ol>
@@ -267,18 +233,6 @@ public class DescribeMojo
     {
         validateParameters();
 
-        if ( project == null )
-        {
-            try
-            {
-                project = projectBuilder.buildStandaloneSuperProject( session.getProjectBuilderConfiguration() );
-            }
-            catch ( ProjectBuildingException e )
-            {
-                throw new MojoExecutionException( "Error while retrieving the super-project.", e );
-            }
-        }
-
         StringBuilder descriptionBuffer = new StringBuilder();
 
         boolean describePlugin = true;
@@ -289,21 +243,16 @@ public class DescribeMojo
 
         if ( describePlugin )
         {
-            PluginInfo pi = new PluginInfo();
-
-            parsePluginLookupInfo( pi );
-
+            PluginInfo pi = parsePluginLookupInfo();
             PluginDescriptor descriptor = lookupPluginDescriptor( pi );
-
             if ( StringUtils.isNotEmpty( goal ) )
             {
                 MojoDescriptor mojo = descriptor.getMojo( goal );
                 if ( mojo == null )
                 {
-                    throw new MojoFailureException(
-                        "The mojo '" + goal + "' does not exist in the plugin '" + pi.getPrefix() + "'" );
+                    throw new MojoFailureException( "The mojo '" + goal + "' does not exist in the plugin '"
+                        + pi.getPrefix() + "'" );
                 }
-
                 describeMojo( mojo, descriptionBuffer );
             }
             else
@@ -325,15 +274,15 @@ public class DescribeMojo
     private void validateParameters()
     {
         // support legacy parameters "mojo" and "full"
-        if ( goal == null && session.getExecutionProperties().get( "mojo" ) != null )
+        if ( goal == null && session.getUserProperties().get( "mojo" ) != null )
         {
-            goal = session.getExecutionProperties().getProperty( "mojo" );
+            goal = session.getUserProperties().getProperty( "mojo" );
         }
 
-        if ( !detail && session.getExecutionProperties().get( "full" ) != null )
+        if ( !detail && session.getUserProperties().get( "full" ) != null )
         {
-            String full = session.getExecutionProperties().getProperty( "full" );
-            detail = Boolean.valueOf( full );
+            String full = session.getUserProperties().getProperty( "full" );
+            detail = Boolean.parseBoolean( full );
         }
 
         if ( detail || minimal )
@@ -362,17 +311,11 @@ public class DescribeMojo
                 throw new MojoExecutionException( "Cannot write plugin/mojo description to output: " + output, e );
             }
 
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( "Wrote descriptions to: " + output );
-            }
+            getLog().info( "Wrote descriptions to: " + output );
         }
         else
         {
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( descriptionBuffer.toString() );
-            }
+            getLog().info( descriptionBuffer.toString() );
         }
     }
 
@@ -387,31 +330,25 @@ public class DescribeMojo
     private PluginDescriptor lookupPluginDescriptor( PluginInfo pi )
         throws MojoExecutionException, MojoFailureException
     {
-        PluginDescriptor descriptor = null;
-
         Plugin forLookup = null;
-
         if ( StringUtils.isNotEmpty( pi.getPrefix() ) )
         {
-            descriptor = pluginManager.getPluginDescriptorForPrefix( pi.getPrefix() );
-            if ( descriptor == null )
+            try
+            {
+                forLookup = mojoDescriptorCreator.findPluginForPrefix( pi.getPrefix(), session );
+            }
+            catch ( NoPluginFoundForPrefixException e )
             {
-                forLookup = pluginManager.getPluginDefinitionForPrefix( pi.getPrefix(), session, project );
+                throw new MojoExecutionException( "Unable to find the plugin with prefix: " + pi.getPrefix(), e );
             }
         }
         else if ( StringUtils.isNotEmpty( pi.getGroupId() ) && StringUtils.isNotEmpty( pi.getArtifactId() ) )
         {
             forLookup = new Plugin();
-
             forLookup.setGroupId( pi.getGroupId() );
             forLookup.setArtifactId( pi.getArtifactId() );
-
-            if ( StringUtils.isNotEmpty( pi.getVersion() ) )
-            {
-                forLookup.setVersion( pi.getVersion() );
-            }
         }
-        else
+        if ( forLookup == null )
         {
             String msg =
                 "You must specify either: both 'groupId' and 'artifactId' parameters OR a 'plugin' parameter"
@@ -427,88 +364,48 @@ public class DescribeMojo
             throw new MojoFailureException( msg );
         }
 
-        if ( descriptor == null && forLookup != null )
+        if ( StringUtils.isNotEmpty( pi.getVersion() ) )
+        {
+            forLookup.setVersion( pi.getVersion() );
+        }
+        else
         {
             try
             {
-                descriptor = pluginManager.loadPluginDescriptor( forLookup, project, session );
-            }
-            catch ( ArtifactResolutionException e )
-            {
-                throw new MojoExecutionException( "Error retrieving plugin descriptor for:" + LS
-                    + LS + "groupId: '" + groupId + "'"
-                    + LS + "artifactId: '" + artifactId + "'"
-                    + LS + "version: '" + version + "'" + LS + LS, e );
-            }
-            catch ( PluginManagerException e )
-            {
-                throw new MojoExecutionException( "Error retrieving plugin descriptor for:" + LS
-                    + LS + "groupId: '" + groupId + "'"
-                    + LS + "artifactId: '" + artifactId + "'"
-                    + LS + "version: '" + version + "'" + LS + LS, e );
+                PluginVersionResult versionResult =
+                    pluginVersionResolver.resolve( new DefaultPluginVersionRequest( forLookup, session ) );
+                forLookup.setVersion( versionResult.getVersion() );
             }
             catch ( PluginVersionResolutionException e )
             {
-                throw new MojoExecutionException( "Error retrieving plugin descriptor for:" + LS
-                    + LS + "groupId: '" + groupId + "'"
-                    + LS + "artifactId: '" + artifactId + "'"
-                    + LS + "version: '" + version + "'" + LS + LS, e );
-            }
-            catch ( ArtifactNotFoundException e )
-            {
-                throw new MojoExecutionException( "Plugin dependency does not exist: " + e.getMessage(), e );
-            }
-            catch ( InvalidVersionSpecificationException e )
-            {
-                throw new MojoExecutionException( "Error retrieving plugin descriptor for:" + LS
-                    + LS + "groupId: '" + groupId + "'"
-                    + LS + "artifactId: '" + artifactId + "'"
-                    + LS + "version: '" + version + "'" + LS + LS, e );
-            }
-            catch ( InvalidPluginException e )
-            {
-                throw new MojoExecutionException( "Error retrieving plugin descriptor for:" + LS
-                    + LS + "groupId: '" + groupId + "'"
-                    + LS + "artifactId: '" + artifactId + "'"
-                    + LS + "version: '" + version + "'" + LS + LS, e );
-            }
-            catch ( PluginNotFoundException e )
-            {
-                if ( getLog().isDebugEnabled() )
-                {
-                    getLog().debug( "Unable to find plugin", e );
-                }
-                throw new MojoFailureException( "Plugin does not exist: " + e.getMessage() );
-            }
-            catch ( PluginVersionNotFoundException e )
-            {
-                if ( getLog().isDebugEnabled() )
-                {
-                    getLog().debug( "Unable to find plugin version", e );
-                }
-                throw new MojoFailureException( e.getMessage() );
+                throw new MojoExecutionException( "Unable to resolve the version of the plugin with prefix: "
+                    + pi.getPrefix(), e );
             }
         }
 
-        if ( descriptor == null )
+        try
         {
-            throw new MojoFailureException( "Plugin could not be found. If you believe it is correct,"
-                + " check your pluginGroups setting, and run with -U to update the remote configuration" );
+            return pluginManager.getPluginDescriptor( forLookup, session );
+        }
+        catch ( Exception e )
+        {
+            throw new MojoExecutionException( "Error retrieving plugin descriptor for:" + LS + LS + "groupId: '"
+                + groupId + "'" + LS + "artifactId: '" + artifactId + "'" + LS + "version: '" + version + "'" + LS
+                + LS, e );
         }
-
-        return descriptor;
     }
 
     /**
      * Method for parsing the plugin parameter
      *
-     * @param pi contains information about the plugin whose description is to be retrieved
+     * @return Plugin info containing information about the plugin whose description is to be retrieved
      * @throws MojoFailureException if <code>plugin<*code> parameter is not conform to
      *                              <code>groupId:artifactId[:version]</code>
      */
-    private void parsePluginLookupInfo( PluginInfo pi )
+    private PluginInfo parsePluginLookupInfo()
         throws MojoFailureException
     {
+        PluginInfo pi = new PluginInfo();
         if ( StringUtils.isNotEmpty( plugin ) )
         {
             if ( plugin.indexOf( ':' ) > -1 )
@@ -517,14 +414,14 @@ public class DescribeMojo
 
                 switch ( pluginParts.length )
                 {
-                    case ( 1 ):
+                    case 1:
                         pi.setPrefix( pluginParts[0] );
                         break;
-                    case ( 2 ):
+                    case 2:
                         pi.setGroupId( pluginParts[0] );
                         pi.setArtifactId( pluginParts[1] );
                         break;
-                    case ( 3 ):
+                    case 3:
                         pi.setGroupId( pluginParts[0] );
                         pi.setArtifactId( pluginParts[1] );
                         pi.setVersion( pluginParts[2] );
@@ -545,6 +442,7 @@ public class DescribeMojo
             pi.setArtifactId( artifactId );
             pi.setVersion( version );
         }
+        return pi;
     }
 
     /**
@@ -564,21 +462,21 @@ public class DescribeMojo
         String name = pd.getName();
         if ( name == null )
         {
-            // Always null see MPLUGIN-137
-            // TODO remove when maven-plugin-tools-api:2.4.4
+            // Can be null because of MPLUGIN-137 (and descriptors generated with maven-plugin-tools-api <= 2.4.3)
+            ArtifactCoordinate coordinate = toArtifactCoordinate( pd, "jar" );
+            ProjectBuildingRequest pbr = new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
+            pbr.setRemoteRepositories( remoteRepositories );
+            pbr.setProject( null );
+            pbr.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
             try
             {
-                Artifact artifact = artifactFactory.createPluginArtifact( pd.getGroupId(), pd.getArtifactId(),
-                                                                          VersionRange.createFromVersion(
-                                                                              pd.getVersion() ) );
-                MavenProject pluginProject =
-                    projectBuilder.buildFromRepository( artifact, remoteRepositories, localRepository );
-
-                name = pluginProject.getName();
+                Artifact artifact = artifactResolver.resolveArtifact( pbr, coordinate ).getArtifact();
+                name = projectBuilder.build( artifact, pbr ).getProject().getName();
             }
-            catch ( ProjectBuildingException e )
+            catch ( Exception e )
             {
                 // oh well, we tried our best.
+                getLog().warn( "Unable to get the name of the plugin " + pd.getId() + ": " + e.getMessage() );
                 name = pd.getId();
             }
         }
@@ -590,7 +488,6 @@ public class DescribeMojo
         append( buffer, "Goal Prefix", pd.getGoalPrefix(), 0 );
         buffer.append( LS );
 
-        @SuppressWarnings( "unchecked" )
         List<MojoDescriptor> mojos = pd.getMojos();
 
         if ( mojos == null )
@@ -742,7 +639,6 @@ public class DescribeMojo
     private void describeMojoParameters( MojoDescriptor md, StringBuilder buffer )
         throws MojoFailureException, MojoExecutionException
     {
-        @SuppressWarnings( "unchecked" )
         List<Parameter> params = md.getParameters();
 
         if ( params == null || params.isEmpty() )
@@ -752,15 +648,7 @@ public class DescribeMojo
         }
 
         params = new ArrayList<Parameter>( params );
-        // TODO remove when maven-plugin-tools-api:2.4.4 is out see PluginUtils.sortMojoParameters()
-        Collections.sort( params, new Comparator<Parameter>()
-        {
-            /** {@inheritDoc} */
-            public int compare( Parameter parameter1, Parameter parameter2 )
-            {
-                return parameter1.getName().compareToIgnoreCase( parameter2.getName() );
-            }
-        } );
+        PluginUtils.sortMojoParameters( params );
 
         append( buffer, "Available parameters:", 1 );
 
@@ -847,106 +735,96 @@ public class DescribeMojo
         if ( cmd.indexOf( ':' ) == -1 )
         {
             // phase
-            try
+            Lifecycle lifecycle = defaultLifecycles.getPhaseToLifecycleMap().get( cmd );
+            if ( lifecycle == null )
             {
-                DefaultLifecycleExecutor lifecycleExecutor =
-                    (DefaultLifecycleExecutor) session.lookup( LifecycleExecutor.ROLE );
-
-                Lifecycle lifecycle = (Lifecycle) lifecycleExecutor.getPhaseToLifecycleMap().get( cmd );
-                if ( lifecycle == null )
-                {
-                    throw new MojoExecutionException( "The given phase '" + cmd + "' is an unknown phase." );
-                }
+                throw new MojoExecutionException( "The given phase '" + cmd + "' is an unknown phase." );
+            }
 
-                LifecycleMapping lifecycleMapping =
-                    (LifecycleMapping) session.lookup( LifecycleMapping.ROLE, project.getPackaging() );
-                @SuppressWarnings( "unchecked" )
-                List<String> phases = lifecycle.getPhases();
+            Map<String, String> defaultLifecyclePhases =
+                lifecycleMappings.get( project.getPackaging() ).getLifecycles().get( "default" ).getPhases();
+            List<String> phases = lifecycle.getPhases();
 
-                if ( lifecycle.getDefaultPhases() == null )
+            if ( lifecycle.getDefaultPhases() == null )
+            {
+                descriptionBuffer.append( "'" ).append( cmd );
+                descriptionBuffer.append( "' is a phase corresponding to this plugin:" ).append( LS );
+                for ( String key : phases )
                 {
-                    descriptionBuffer.append( "'" ).append( cmd );
-                    descriptionBuffer.append( "' is a phase corresponding to this plugin:" ).append( LS );
-                    for ( String key : phases )
+                    if ( !key.equals( cmd ) )
                     {
-                        if ( !key.equals( cmd ) )
-                        {
-                            continue;
-                        }
-
-                        if ( lifecycleMapping.getPhases( "default" ).get( key ) != null )
-                        {
-                            descriptionBuffer.append( lifecycleMapping.getPhases( "default" ).get( key ) );
-                            descriptionBuffer.append( LS );
-                        }
+                        continue;
                     }
+                    if ( defaultLifecyclePhases.get( key ) != null )
+                    {
+                        descriptionBuffer.append( defaultLifecyclePhases.get( key ) );
+                        descriptionBuffer.append( LS );
+                    }
+                }
 
-                    descriptionBuffer.append( LS );
-                    descriptionBuffer.append( "It is a part of the lifecycle for the POM packaging '" );
-                    descriptionBuffer.append( project.getPackaging() );
-                    descriptionBuffer.append( "'. This lifecycle includes the following phases:" );
-                    descriptionBuffer.append( LS );
-                    for ( String key : phases )
+                descriptionBuffer.append( LS );
+                descriptionBuffer.append( "It is a part of the lifecycle for the POM packaging '" );
+                descriptionBuffer.append( project.getPackaging() );
+                descriptionBuffer.append( "'. This lifecycle includes the following phases:" );
+                descriptionBuffer.append( LS );
+                for ( String key : phases )
+                {
+                    descriptionBuffer.append( "* " ).append( key ).append( ": " );
+                    String value = defaultLifecyclePhases.get( key );
+                    if ( StringUtils.isNotEmpty( value ) )
                     {
-                        descriptionBuffer.append( "* " ).append( key ).append( ": " );
-                        String value = (String) lifecycleMapping.getPhases( "default" ).get( key );
-                        if ( StringUtils.isNotEmpty( value ) )
+                        for ( StringTokenizer tok = new StringTokenizer( value, "," ); tok.hasMoreTokens(); )
                         {
-                            for ( StringTokenizer tok = new StringTokenizer( value, "," ); tok.hasMoreTokens(); )
-                            {
-                                descriptionBuffer.append( tok.nextToken().trim() );
+                            descriptionBuffer.append( tok.nextToken().trim() );
 
-                                if ( !tok.hasMoreTokens() )
-                                {
-                                    descriptionBuffer.append( LS );
-                                }
-                                else
-                                {
-                                    descriptionBuffer.append( ", " );
-                                }
+                            if ( !tok.hasMoreTokens() )
+                            {
+                                descriptionBuffer.append( LS );
+                            }
+                            else
+                            {
+                                descriptionBuffer.append( ", " );
                             }
-                        }
-                        else
-                        {
-                            descriptionBuffer.append( NOT_DEFINED ).append( LS );
                         }
                     }
-                }
-                else
-                {
-                    descriptionBuffer.append( "'" ).append( cmd );
-                    descriptionBuffer.append( "' is a lifecycle with the following phases: " );
-                    descriptionBuffer.append( LS );
-
-                    for ( String key : phases )
+                    else
                     {
-                        descriptionBuffer.append( "* " ).append( key ).append( ": " );
-                        if ( lifecycle.getDefaultPhases().get( key ) != null )
-                        {
-                            descriptionBuffer.append( lifecycle.getDefaultPhases().get( key ) ).append( LS );
-                        }
-                        else
-                        {
-                            descriptionBuffer.append( NOT_DEFINED ).append( LS );
-                        }
+                        descriptionBuffer.append( NOT_DEFINED ).append( LS );
                     }
                 }
             }
-            catch ( ComponentLookupException e )
-            {
-                throw new MojoFailureException( "ComponentLookupException: " + e.getMessage() );
-            }
-            catch ( LifecycleExecutionException e )
+            else
             {
-                throw new MojoFailureException( "LifecycleExecutionException: " + e.getMessage() );
-            }
+                descriptionBuffer.append( "'" ).append( cmd );
+                descriptionBuffer.append( "' is a lifecycle with the following phases: " );
+                descriptionBuffer.append( LS );
 
+                for ( String key : phases )
+                {
+                    descriptionBuffer.append( "* " ).append( key ).append( ": " );
+                    if ( lifecycle.getDefaultPhases().get( key ) != null )
+                    {
+                        descriptionBuffer.append( lifecycle.getDefaultPhases().get( key ) ).append( LS );
+                    }
+                    else
+                    {
+                        descriptionBuffer.append( NOT_DEFINED ).append( LS );
+                    }
+                }
+            }
             return false;
         }
 
         // goals
-        MojoDescriptor mojoDescriptor = HelpUtil.getMojoDescriptor( cmd, session, project, cmd, true, false );
-
+        MojoDescriptor mojoDescriptor;
+        try
+        {
+            mojoDescriptor = mojoDescriptorCreator.getMojoDescriptor( cmd, session, project );
+        }
+        catch ( Exception e )
+        {
+            throw new MojoExecutionException( "Unable to get descriptor for " + cmd, e );
+        }
         descriptionBuffer.append( "'" ).append( cmd ).append( "' is a plugin goal (aka mojo)" ).append( "." );
         descriptionBuffer.append( LS );
         plugin = mojoDescriptor.getPluginDescriptor().getId();
@@ -977,6 +855,7 @@ public class DescribeMojo
                                                          new Class[]{ String.class, Integer.TYPE, Integer.TYPE,
                                                              Integer.TYPE } );
             m.setAccessible( true );
+            @SuppressWarnings( "unchecked" )
             List<String> output = (List<String>) m.invoke( HelpMojo.class, text, indent, indentSize, lineLength );
 
             if ( output == null )
@@ -1122,15 +1001,18 @@ public class DescribeMojo
      */
     private boolean isReportGoal( MojoDescriptor md )
     {
-        PluginDescriptor d = md.getPluginDescriptor();
-        Artifact jar = artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(), "", "jar" );
-        Artifact pom = artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(), "", "pom" );
+        PluginDescriptor pd = md.getPluginDescriptor();
         List<URL> urls = new ArrayList<URL>();
+        ProjectBuildingRequest pbr = new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
+        pbr.setRemoteRepositories( remoteRepositories );
+        pbr.setResolveDependencies( true );
+        pbr.setProject( null );
+        pbr.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
         try
         {
-            artifactResolver.resolve( jar, remoteRepositories, localRepository );
-            artifactResolver.resolve( pom, remoteRepositories, localRepository );
-            MavenProject project = projectBuilder.buildWithDependencies( pom.getFile(), localRepository, null );
+            Artifact jar = artifactResolver.resolveArtifact( pbr, toArtifactCoordinate( pd, "jar" ) ).getArtifact();
+            Artifact pom = artifactResolver.resolveArtifact( pbr, toArtifactCoordinate( pd, "pom" ) ).getArtifact();
+            MavenProject project = projectBuilder.build( pom.getFile(), pbr ).getProject();
             urls.add( jar.getFile().toURI().toURL() );
             for ( Object artifact : project.getCompileClasspathElements() )
             {
@@ -1142,12 +1024,25 @@ public class DescribeMojo
         }
         catch ( Exception e )
         {
-            getLog().warn( "Couldn't identify if this goal is a report goal.", e );
+            getLog().warn( "Couldn't identify if this goal is a report goal: " + e.getMessage() );
             return false;
         }
     }
 
     /**
+     * Transforms the given plugin descriptor into an artifact coordinate. It is formed by its GAV information, along
+     * with the given type.
+     * 
+     * @param pd Plugin descriptor.
+     * @param type Extension for the coordinate.
+     * @return Coordinate of an artifact having the same GAV as the given plugin descriptor, with the given type.
+     */
+    private ArtifactCoordinate toArtifactCoordinate( PluginDescriptor pd, String type )
+    {
+        return getArtifactCoordinate( pd.getGroupId(), pd.getArtifactId(), pd.getVersion(), type );
+    }
+
+    /**
      * Gets the effective string to use for the plugin/mojo/parameter description.
      *
      * @param description The description of the element, may be <code>null</code>.
@@ -1157,7 +1052,7 @@ public class DescribeMojo
     {
         if ( StringUtils.isNotEmpty( description ) )
         {
-            return PluginUtils.toText( description );
+            return GeneratorUtils.toText( description );
         }
 
         return "(no description available)";
@@ -1176,12 +1071,6 @@ public class DescribeMojo
 
         private String version;
 
-        private String mojo;
-
-        private Plugin plugin;
-
-        private PluginDescriptor pluginDescriptor;
-
         /**
          * @return the prefix
          */
@@ -1246,52 +1135,5 @@ public class DescribeMojo
             this.version = version;
         }
 
-        /**
-         * @return the mojo
-         */
-        public String getMojo()
-        {
-            return mojo;
-        }
-
-        /**
-         * @param mojo the mojo to set
-         */
-        public void setMojo( String mojo )
-        {
-            this.mojo = mojo;
-        }
-
-        /**
-         * @return the plugin
-         */
-        public Plugin getPlugin()
-        {
-            return plugin;
-        }
-
-        /**
-         * @param plugin the plugin to set
-         */
-        public void setPlugin( Plugin plugin )
-        {
-            this.plugin = plugin;
-        }
-
-        /**
-         * @return the pluginDescriptor
-         */
-        public PluginDescriptor getPluginDescriptor()
-        {
-            return pluginDescriptor;
-        }
-
-        /**
-         * @param pluginDescriptor the pluginDescriptor to set
-         */
-        public void setPluginDescriptor( PluginDescriptor pluginDescriptor )
-        {
-            this.pluginDescriptor = pluginDescriptor;
-        }
     }
 }

Modified: maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java Fri Nov 11 17:13:13 2016
@@ -19,8 +19,6 @@ package org.apache.maven.plugins.help;
  * under the License.
  */
 
-import static org.apache.maven.plugins.help.HelpUtil.LS;
-
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -74,11 +72,11 @@ public class EffectivePomMojo
     
     /**
      * The artifact for which to display the effective POM.
-     * <br/>
+     * <br>
      * <b>Note</b>: Should respect the Maven format, i.e. <code>groupId:artifactId[:version]</code>. The
      * latest version of the artifact will be used when no version is specified.
      * 
-     * @since 2.2.1
+     * @since 3.0.0
      */
     @Parameter( property = "artifact" )
     private String artifact;
@@ -135,10 +133,7 @@ public class EffectivePomMojo
                 throw new MojoExecutionException( "Cannot write effective-POM to output: " + output, e );
             }
 
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( "Effective-POM written to: " + output );
-            }
+            getLog().info( "Effective-POM written to: " + output );
         }
         else
         {
@@ -150,10 +145,7 @@ public class EffectivePomMojo
             message.append( effectivePom );
             message.append( LS );
 
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( message.toString() );
-            }
+            getLog().info( message.toString() );
         }
     }
 

Modified: maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectiveSettingsMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectiveSettingsMojo.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectiveSettingsMojo.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EffectiveSettingsMojo.java Fri Nov 11 17:13:13 2016
@@ -19,7 +19,13 @@ package org.apache.maven.plugins.help;
  * under the License.
  */
 
-import static org.apache.maven.plugins.help.HelpUtil.LS;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
 
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -35,14 +41,6 @@ import org.codehaus.plexus.util.xml.Pret
 import org.codehaus.plexus.util.xml.XMLWriter;
 import org.codehaus.plexus.util.xml.XmlWriterUtil;
 
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
 /**
  * Displays the calculated settings as XML for this project, given any profile enhancement and the inheritance
  * of the global settings into the user-level settings.
@@ -114,10 +112,7 @@ public class EffectiveSettingsMojo
                 throw new MojoExecutionException( "Cannot write effective-settings to output: " + output, e );
             }
 
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( "Effective-settings written to: " + output );
-            }
+            getLog().info( "Effective-settings written to: " + output );
         }
         else
         {
@@ -127,10 +122,7 @@ public class EffectiveSettingsMojo
             message.append( effectiveSettings );
             message.append( LS );
 
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( message.toString() );
-            }
+            getLog().info( message.toString() );
         }
     }
 

Modified: maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EvaluateMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EvaluateMojo.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EvaluateMojo.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EvaluateMojo.java Fri Nov 11 17:13:13 2016
@@ -19,8 +19,6 @@ package org.apache.maven.plugins.help;
  * under the License.
  */
 
-import static org.apache.maven.plugins.help.HelpUtil.LS;
-
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -35,11 +33,7 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
 import org.apache.commons.lang3.ClassUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
@@ -51,11 +45,14 @@ import org.apache.maven.plugin.descripto
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.project.path.PathTranslator;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
+import org.apache.maven.shared.artifact.resolve.ArtifactResolverException;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.codehaus.plexus.components.interactivity.InputHandler;
 import org.codehaus.plexus.util.IOUtil;
@@ -88,20 +85,10 @@ public class EvaluateMojo
     private InputHandler inputHandler;
 
     /**
+     * Component used to get mojo descriptors.
      */
     @Component
-    private PathTranslator pathTranslator;
-
-    /**
-     * Artifact Resolver component.
-     */
-    @Component
-    private ArtifactResolver resolver;
-
-    /**
-     */
-    @Component
-    private LoggerRetriever loggerRetriever;
+    private MojoDescriptorCreator mojoDescriptorCreator;
 
     // ----------------------------------------------------------------------
     // Mojo parameters
@@ -114,7 +101,7 @@ public class EvaluateMojo
      * <br/>
      * <b>Note</b>: Could be a relative path.
      * 
-     * @since 2.2.1
+     * @since 3.0.0
      */
     @Parameter( property = "output" )
     private File output;
@@ -138,19 +125,13 @@ public class EvaluateMojo
      * Maven project built from the given {@link #artifact}. Otherwise, the current Maven project or the super pom.
      */
     @Parameter( defaultValue = "${project}", readonly = true, required = true )
-    protected MavenProject project;
+    private MavenProject project;
 
     /**
      * The system settings for Maven.
      */
     @Parameter( defaultValue = "${settings}", readonly = true, required = true )
-    protected Settings settings;
-
-    /**
-     * The current Maven session.
-     */
-    @Parameter( defaultValue = "${session}", readonly = true, required = true )
-    private MavenSession session;
+    private Settings settings;
 
     // ----------------------------------------------------------------------
     // Instance variables
@@ -238,26 +219,30 @@ public class EvaluateMojo
      * @return a lazy loading evaluator object.
      * @throws MojoExecutionException if any
      * @throws MojoFailureException if any reflection exceptions occur or missing components.
-     * @see #getMojoDescriptor(String, MavenSession, MavenProject, String, boolean, boolean)
      */
     private PluginParameterExpressionEvaluator getEvaluator()
         throws MojoExecutionException, MojoFailureException
     {
         if ( evaluator == null )
         {
-            MojoDescriptor mojoDescriptor =
-                HelpUtil.getMojoDescriptor( "help:evaluate", session, project, "help:evaluate", true, false );
+            MojoDescriptor mojoDescriptor;
+            try
+            {
+                mojoDescriptor = mojoDescriptorCreator.getMojoDescriptor( "help:evaluate", session, project );
+            }
+            catch ( Exception e )
+            {
+                throw new MojoFailureException( "Failure while evaluating.", e );
+            }
             MojoExecution mojoExecution = new MojoExecution( mojoDescriptor );
 
             MavenProject currentProject = session.getCurrentProject();
-            // Maven3: PluginParameterExpressionEvaluator ignores the project parameter and gets the current project
-            // from the session: synchronize in case another thread wants to fetch the real current project in between
+            // Maven 3: PluginParameterExpressionEvaluator gets the current project from the session:
+            // synchronize in case another thread wants to fetch the real current project in between
             synchronized ( session )
             {
                 session.setCurrentProject( project );
-                evaluator = new PluginParameterExpressionEvaluator( session, mojoExecution, pathTranslator,
-                                                                    loggerRetriever.getLogger(), project,
-                                                                    session.getExecutionProperties() );
+                evaluator = new PluginParameterExpressionEvaluator( session, mojoExecution );
                 session.setCurrentProject( currentProject );
             }
         }
@@ -486,18 +471,11 @@ public class EvaluateMojo
                 getLog().debug( "MojoExecutionException: " + e.getMessage(), e );
             }
         }
-        catch ( ArtifactResolutionException e )
+        catch ( ArtifactResolverException e )
         {
             if ( getLog().isDebugEnabled() )
             {
-                getLog().debug( "ArtifactResolutionException: " + e.getMessage(), e );
-            }
-        }
-        catch ( ArtifactNotFoundException e )
-        {
-            if ( getLog().isDebugEnabled() )
-            {
-                getLog().debug( "ArtifactNotFoundException: " + e.getMessage(), e );
+                getLog().debug( "ArtifactResolverException: " + e.getMessage(), e );
             }
         }
         catch ( ProjectBuildingException e )
@@ -572,12 +550,10 @@ public class EvaluateMojo
      * @return the <code>org.apache.maven:maven-model</code> artifact jar file in the local repository.
      * @throws MojoExecutionException if any
      * @throws ProjectBuildingException if any
-     * @throws ArtifactResolutionException if any
-     * @throws ArtifactNotFoundException if any
+     * @throws ArtifactResolverException if any
      */
     private File getMavenModelJarFile()
-        throws MojoExecutionException, ProjectBuildingException, ArtifactResolutionException,
-        ArtifactNotFoundException
+        throws MojoExecutionException, ProjectBuildingException, ArtifactResolverException
     {
         return getArtifactFile( true );
     }
@@ -586,32 +562,26 @@ public class EvaluateMojo
      * @return the <code>org.apache.maven:maven-settings</code> artifact jar file in the local repository.
      * @throws MojoExecutionException if any
      * @throws ProjectBuildingException if any
-     * @throws ArtifactResolutionException if any
-     * @throws ArtifactNotFoundException if any
+     * @throws ArtifactResolverException if any
      */
     private File getMavenSettingsJarFile()
-        throws MojoExecutionException, ProjectBuildingException, ArtifactResolutionException,
-        ArtifactNotFoundException
+        throws MojoExecutionException, ProjectBuildingException, ArtifactResolverException
     {
         return getArtifactFile( false );
     }
 
     /**
-     *
-     * @param isPom <code>true</code> to lookup the <code>maven-model</code> artifact jar, <code>false</code> to
-     * lookup the <code>maven-settings</code> artifact jar.
+     * @param isPom <code>true</code> to lookup the <code>maven-model</code> artifact jar, <code>false</code> to lookup
+     *            the <code>maven-settings</code> artifact jar.
      * @return the <code>org.apache.maven:maven-model|maven-settings</code> artifact jar file for this current
-     * HelpPlugin pom.
+     *         HelpPlugin pom.
      * @throws MojoExecutionException if any
      * @throws ProjectBuildingException if any
-     * @throws ArtifactResolutionException if any
-     * @throws ArtifactNotFoundException if any
+     * @throws ArtifactResolverException if any
      */
     private File getArtifactFile( boolean isPom )
-        throws MojoExecutionException, ProjectBuildingException, ArtifactResolutionException,
-        ArtifactNotFoundException
+        throws MojoExecutionException, ProjectBuildingException, ArtifactResolverException
     {
-        @SuppressWarnings( "unchecked" )
         List<Dependency> dependencies = getHelpPluginPom().getDependencies();
         for ( Dependency depependency : dependencies )
         {
@@ -635,12 +605,12 @@ public class EvaluateMojo
                 }
             }
 
-            Artifact mavenArtifact =
-                getArtifact( depependency.getGroupId() + ":" + depependency.getArtifactId() + ":"
-                    + depependency.getVersion() );
-            resolver.resolveAlways( mavenArtifact, remoteRepositories, localRepository );
-
-            return mavenArtifact.getFile();
+            ArtifactCoordinate coordinate =
+                getArtifactCoordinate( depependency.getGroupId(), depependency.getArtifactId(),
+                                       depependency.getVersion(), "jar" );
+            ProjectBuildingRequest pbr = new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
+            pbr.setRemoteRepositories( remoteRepositories );
+            return artifactResolver.resolveArtifact( pbr, coordinate ).getArtifact().getFile();
         }
 
         throw new MojoExecutionException( "Unable to find the 'org.apache.maven:"

Modified: maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/SystemMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/SystemMojo.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/SystemMojo.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/SystemMojo.java Fri Nov 11 17:13:13 2016
@@ -19,8 +19,6 @@ package org.apache.maven.plugins.help;
  * under the License.
  */
 
-import static org.apache.maven.plugins.help.HelpUtil.LS;
-
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -67,11 +65,10 @@ public class SystemMojo
         message.append( StringUtils.repeat( "=", LINE_LENGTH ) ).append( LS );
 
         Properties systemProperties = System.getProperties();
-        for ( Object o1 : systemProperties.keySet() )
+        for ( String key : systemProperties.stringPropertyNames() )
         {
-            String key = o1.toString();
             message.append( LS );
-            message.append( key ).append( "=" ).append( systemProperties.get( key ) );
+            message.append( key ).append( "=" ).append( systemProperties.getProperty( key ) );
         }
 
         message.append( LS ).append( LS );
@@ -81,19 +78,15 @@ public class SystemMojo
         try
         {
             Properties envVars = CommandLineUtils.getSystemEnvVars();
-            for ( Object o : envVars.keySet() )
+            for ( String key : envVars.stringPropertyNames() )
             {
-                String key = o.toString();
                 message.append( LS );
-                message.append( key ).append( "=" ).append( envVars.get( key ) );
+                message.append( key ).append( "=" ).append( envVars.getProperty( key ) );
             }
         }
         catch ( IOException e )
         {
-            if ( getLog().isWarnEnabled() )
-            {
-                getLog().warn( "IOException: " + e.getMessage() );
-            }
+            getLog().warn( "Unable to get the environment variables: " + e.getMessage() );
         }
 
         message.append( LS );
@@ -115,17 +108,11 @@ public class SystemMojo
                 throw new MojoExecutionException( "Cannot write system report to output: " + output, e );
             }
 
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( "System report written to: " + output );
-            }
+            getLog().info( "System report written to: " + output );
         }
         else
         {
-            if ( getLog().isInfoEnabled() )
-            {
-                getLog().info( message );
-            }
+            getLog().info( message );
         }
     }
 }

Modified: maven/plugins/trunk/maven-help-plugin/src/site/apt/examples/describe-configuration.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/site/apt/examples/describe-configuration.apt?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/site/apt/examples/describe-configuration.apt (original)
+++ maven/plugins/trunk/maven-help-plugin/src/site/apt/examples/describe-configuration.apt Fri Nov 11 17:13:13 2016
@@ -226,10 +226,6 @@ help:evaluate
     interactive mode.
   Deprecated. No reason given
 
-help:expressions
-  Description: Displays the supported Plugin expressions used by Maven.
-  Deprecated. No reason given
-
 help:help
   Description: Display help information on maven-help-plugin.
     Call

Modified: maven/plugins/trunk/maven-help-plugin/src/site/apt/index.apt.vm
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/site/apt/index.apt.vm?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/site/apt/index.apt.vm (original)
+++ maven/plugins/trunk/maven-help-plugin/src/site/apt/index.apt.vm Fri Nov 11 17:13:13 2016
@@ -36,7 +36,7 @@ ${project.name}
 
 * Goals Overview
 
-  The Help Plugin has 8 goals:
+  The Help Plugin has 7 goals:
 
   * {{{./active-profiles-mojo.html}help:active-profiles}} lists the profiles which are currently active for the build.
 
@@ -53,13 +53,18 @@ ${project.name}
 
   * {{{./evaluate-mojo.html}help:evaluate}} evaluates Maven expressions given by the user in an interactive mode.
 
-  * {{{./expressions-mojo.html}help:expressions}} displays the supported Plugin expressions used by Maven.
-
   * {{{./system-mojo.html}help:system}} displays a list of the platform details like system properties and environment
   variables.
 
   []
 
+* Major Version Upgrade to version 3.0.0
+
+  Please note that the goal <<<expressions>>> has been completely removed from the plugin. All the Maven expressions
+  that are supported as plugin parameters are available in the Javadoc of the 
+  {{{/ref/current/maven-core/apidocs/org/apache/maven/plugin/PluginParameterExpressionEvaluator.html}
+  <<<PluginParameterExpressionEvaluator>>>}} class.
+
 * Usage
 
   General instructions on how to use the Help Plugin can be found on the {{{./usage.html}usage page}}. Some more

Modified: maven/plugins/trunk/maven-help-plugin/src/site/apt/usage.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/site/apt/usage.apt?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/site/apt/usage.apt (original)
+++ maven/plugins/trunk/maven-help-plugin/src/site/apt/usage.apt Fri Nov 11 17:13:13 2016
@@ -120,36 +120,6 @@ Usage
 
  <<Note>>: you could also use the <<<output>>> parameter to redirect output to a file.
 
-* The <<<expressions>>> Goal
-
-  When you develop a new Maven Plugin, you could need to use some expressions given by Maven. To list them, just call
-  the {{{./expressions-mojo.html}expressions}} goal:
-
-+-----+
-# mvn help:expressions
-...
-[INFO] [help:expressions]
-[INFO] Maven supports the following Plugin expressions:
-
-${project}: No description available.
-
-${settings}: No description available.
-
-${session}: No description available.
-
-${plugin}: No description available.
-
-${rootless}: No description available.
-
-${settings.interactiveMode}: If false, flags the system to skip prompting the
-user for any information, or holding up the build waiting for any input. NOTE:
-It's also possible to switch to batch (ie. non-interactive) mode using the '-B'
-command-line option.
-...
-+-----+
-
- <<Note>>: you could also use the <<<output>>> parameter to redirect output to a file.
-
 * The <<<help:evaluate>>> Goal
 
   You could use this interactive goal to evaluate some Maven expressions. To do it, just call the
@@ -173,5 +143,6 @@ null object or invalid expression
  The <<<artifact>>> parameter refers to ask expressions on the artifact POM. If omitted, the evaluate goal uses the current
  pom.
 
- You could ask for all Maven expressions listed by <<<help:expressions>>> goal, i.e. $\{project\}, $\{project.licenses\},
- $\{settings\}, $\{settings.profiles\}.
+ You could ask for all Maven expressions listed in the Javadoc of the 
+ {{{/ref/current/maven-core/apidocs/org/apache/maven/plugin/PluginParameterExpressionEvaluator.html}
+ <<<PluginParameterExpressionEvaluator>>>}} class.

Added: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/ActiveProfilesMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/ActiveProfilesMojoTest.java?rev=1769319&view=auto
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/ActiveProfilesMojoTest.java (added)
+++ maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/ActiveProfilesMojoTest.java Fri Nov 11 17:13:13 2016
@@ -0,0 +1,133 @@
+package org.apache.maven.plugins.help;
+
+/*
+ * 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 static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.IOUtil;
+
+/**
+ * Test class for the active-profiles mojo of the Help Plugin.
+ */
+public class ActiveProfilesMojoTest
+    extends AbstractMojoTestCase
+{
+
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+    }
+
+    /**
+     * Tests that profiles activated in the settings are resolved.
+     * 
+     * @throws Exception in case of errors.
+     */
+    public void testActiveProfilesFromSettings()
+        throws Exception
+    {
+        File testPom = new File( getBasedir(), "target/test-classes/unit/active-profiles/plugin-config.xml" );
+
+        ActiveProfilesMojo mojo = (ActiveProfilesMojo) lookupMojo( "active-profiles", testPom );
+
+        MavenProject project = mock( MavenProject.class );
+        when( project.getInjectedProfileIds() ).thenReturn( getProfiles( Arrays.asList( "from-settings" ),
+                                                                         Collections.<String>emptyList() ) );
+
+        setUpMojo( mojo, Arrays.asList( project ), "from-settings.txt" );
+
+        mojo.execute();
+
+        String file = readFile( "from-settings.txt" );
+        assertTrue( file.contains( "from-settings (source: external)" ) );
+    }
+
+    /**
+     * Tests that profiles activated in the POM are resolved.
+     * 
+     * @throws Exception in case of errors.
+     */
+    public void testActiveProfilesFromPom()
+        throws Exception
+    {
+        File testPom = new File( getBasedir(), "target/test-classes/unit/active-profiles/plugin-config.xml" );
+
+        ActiveProfilesMojo mojo = (ActiveProfilesMojo) lookupMojo( "active-profiles", testPom );
+
+        MavenProject project = mock( MavenProject.class );
+        when( project.getInjectedProfileIds() ).thenReturn( getProfiles( Collections.<String>emptyList(),
+                                                                         Arrays.asList( "from-pom" ) ) );
+
+        setUpMojo( mojo, Arrays.asList( project ), "from-pom.txt" );
+
+        mojo.execute();
+
+        String file = readFile( "from-pom.txt" );
+        assertTrue( file.contains( "from-pom (source: org.apache.maven.test:test:1.0)" ) );
+    }
+
+    private Map<String, List<String>> getProfiles( List<String> externals, List<String> pom )
+    {
+        Map<String, List<String>> profiles = new HashMap<String, List<String>>();
+        profiles.put( "external", externals ); // from settings
+        profiles.put( "org.apache.maven.test:test:1.0", pom ); // from POM
+        profiles.put( "", Collections.<String>emptyList() ); // from super POM
+        return profiles;
+    }
+
+    private void setUpMojo( ActiveProfilesMojo mojo, List<MavenProject> projects, String output )
+        throws IllegalAccessException
+    {
+        setVariableValueToObject( mojo, "projects", projects );
+        setVariableValueToObject( mojo, "output",
+                                  new File( getBasedir(), "target/test-classes/unit/active-profiles/" + output ) );
+    }
+
+    private String readFile( String path )
+        throws FileNotFoundException, IOException
+    {
+        FileInputStream fis = null;
+        try
+        {
+            fis = new FileInputStream( new File( getBasedir(), "target/test-classes/unit/active-profiles/" + path ) );
+            return IOUtil.toString( fis );
+        }
+        finally
+        {
+            IOUtil.close( fis );
+        }
+    }
+
+}

Propchange: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/ActiveProfilesMojoTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/ActiveProfilesMojoTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/AllProfilesMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/AllProfilesMojoTest.java?rev=1769319&view=auto
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/AllProfilesMojoTest.java (added)
+++ maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/AllProfilesMojoTest.java Fri Nov 11 17:13:13 2016
@@ -0,0 +1,194 @@
+package org.apache.maven.plugins.help;
+
+/*
+ * 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.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.model.Profile;
+import org.apache.maven.monitor.logging.DefaultLog;
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.util.IOUtil;
+
+/**
+ * Test class for the all-profiles mojo of the Help Plugin.
+ */
+public class AllProfilesMojoTest
+    extends AbstractMojoTestCase
+{
+
+    private InterceptingLog interceptingLogger;
+
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        interceptingLogger =
+            new InterceptingLog( getContainer().lookup( LoggerManager.class ).getLoggerForComponent( Mojo.ROLE ) );
+    }
+
+    /**
+     * Tests the case when no profiles are present for the projects.
+     * 
+     * @throws Exception in case of errors.
+     */
+    public void testNoProfiles()
+        throws Exception
+    {
+        File testPom = new File( getBasedir(), "target/test-classes/unit/all-profiles/plugin-config.xml" );
+
+        AllProfilesMojo mojo = (AllProfilesMojo) lookupMojo( "all-profiles", testPom );
+
+        setUpMojo( mojo, Arrays.<MavenProject>asList( new MavenProjectStub() ),
+                   Collections.<org.apache.maven.settings.Profile>emptyList(), "empty.txt" );
+
+        mojo.execute();
+
+        assertTrue( interceptingLogger.warnLogs.contains( "No profiles detected!" ) );
+    }
+    
+    /**
+     * Tests the case when profiles are present in the POM and in a parent POM.
+     * 
+     * @throws Exception in case of errors.
+     */
+    public void testProfileFromPom()
+        throws Exception
+    {
+        File testPom = new File( getBasedir(), "target/test-classes/unit/all-profiles/plugin-config.xml" );
+
+        AllProfilesMojo mojo = (AllProfilesMojo) lookupMojo( "all-profiles", testPom );
+
+        MavenProjectStub project = new MavenProjectStub();
+        project.getModel().setProfiles( Arrays.asList( newPomProfile( "pro-1", "pom" ), newPomProfile( "pro-2", "pom" ) ) );
+        project.setParent( new MavenProjectStub() );
+        project.getParent().getModel().setProfiles( Arrays.asList( newPomProfile( "pro-3", "pom" ) ) );
+        project.setActiveProfiles( Arrays.asList( newPomProfile( "pro-1", "pom" ) ) );
+        
+        setUpMojo( mojo, Arrays.<MavenProject>asList( project ),
+                   Collections.<org.apache.maven.settings.Profile>emptyList(), "profiles-from-pom.txt" );
+
+        mojo.execute();
+
+        String file = readFile( "profiles-from-pom.txt" );
+        assertTrue( file.contains( "Profile Id: pro-1 (Active: true , Source: pom)" ) );
+        assertTrue( file.contains( "Profile Id: pro-2 (Active: false , Source: pom)" ) );
+        assertTrue( file.contains( "Profile Id: pro-3 (Active: false , Source: pom)" ) );
+    }
+    
+    /**
+     * Tests the case when profiles are present in the settings.
+     * 
+     * @throws Exception in case of errors.
+     */
+    public void testProfileFromSettings()
+        throws Exception
+    {
+        File testPom = new File( getBasedir(), "target/test-classes/unit/all-profiles/plugin-config.xml" );
+
+        AllProfilesMojo mojo = (AllProfilesMojo) lookupMojo( "all-profiles", testPom );
+
+        MavenProject project = new MavenProjectStub();
+        project.setActiveProfiles( Arrays.asList( newPomProfile( "settings-1", "settings.xml" ) ) );
+        
+        List<org.apache.maven.settings.Profile> settingsProfiles = new ArrayList<org.apache.maven.settings.Profile>();
+        settingsProfiles.add( newSettingsProfile( "settings-1" ) );
+        settingsProfiles.add( newSettingsProfile( "settings-2" ) );
+        setUpMojo( mojo, Arrays.<MavenProject>asList( project ), settingsProfiles, "profiles-from-settings.txt" );
+
+        mojo.execute();
+
+        String file = readFile( "profiles-from-settings.txt" );
+        assertTrue( file.contains( "Profile Id: settings-1 (Active: true , Source: settings.xml)" ) );
+        assertTrue( file.contains( "Profile Id: settings-2 (Active: false , Source: settings.xml)" ) );
+    }
+
+    private Profile newPomProfile( String id, String source )
+    {
+        Profile profile = new Profile();
+        profile.setId( id );
+        profile.setSource( source );
+        return profile;
+    }
+    
+    private org.apache.maven.settings.Profile newSettingsProfile( String id )
+    {
+        org.apache.maven.settings.Profile profile = new org.apache.maven.settings.Profile();
+        profile.setId( id );
+        return profile;
+    }
+
+    private void setUpMojo( AllProfilesMojo mojo, List<MavenProject> projects,
+                            List<org.apache.maven.settings.Profile> settingsProfiles, String output )
+        throws IllegalAccessException
+    {
+        setVariableValueToObject( mojo, "projects", projects );
+        setVariableValueToObject( mojo, "settingsProfiles", settingsProfiles );
+        setVariableValueToObject( mojo, "output",
+                                  new File( getBasedir(), "target/test-classes/unit/active-profiles/" + output ) );
+        setVariableValueToObject( mojo, "log", interceptingLogger );
+    }
+
+    private String readFile( String path )
+        throws FileNotFoundException, IOException
+    {
+        FileInputStream fis = null;
+        try
+        {
+            fis = new FileInputStream( new File( getBasedir(), "target/test-classes/unit/active-profiles/" + path ) );
+            return IOUtil.toString( fis );
+        }
+        finally
+        {
+            IOUtil.close( fis );
+        }
+    }
+    
+    private static final class InterceptingLog
+        extends DefaultLog
+    {
+        List<String> warnLogs = new ArrayList<String>();
+
+        public InterceptingLog( Logger logger )
+        {
+            super( logger );
+        }
+
+        @Override
+        public void warn( CharSequence content )
+        {
+            super.warn( content );
+            warnLogs.add( content.toString() );
+        }
+    }
+
+}

Propchange: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/AllProfilesMojoTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/AllProfilesMojoTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java Fri Nov 11 17:13:13 2016
@@ -19,13 +19,29 @@ package org.apache.maven.plugins.help;
  * under the License.
  */
 
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
+import org.apache.maven.model.Plugin;
 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.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.plugin.version.PluginVersionResult;
+import org.apache.maven.plugins.help.DescribeMojo.PluginInfo;
+import org.apache.maven.reporting.exec.MavenPluginManagerHelper;
+import org.mockito.ArgumentCaptor;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
 import junitx.util.PrivateAccessor;
-
 /**
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
  * @version $Id$
@@ -112,5 +128,235 @@ public class DescribeMojoTest
         }
         
     }
+    
+    public void testParsePluginInfoGAV()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PrivateAccessor.setField( mojo, "groupId", "org.test" );
+        PrivateAccessor.setField( mojo, "artifactId", "test" );
+        PrivateAccessor.setField( mojo, "version", "1.0" );
+        PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
+        assertEquals( pi.getGroupId(), "org.test" );
+        assertEquals( pi.getArtifactId(), "test" );
+        assertEquals( pi.getVersion(), "1.0" );
+        assertNull( pi.getPrefix() );
+    }
+    
+    public void testParsePluginInfoPluginPrefix()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PrivateAccessor.setField( mojo, "plugin", "help" );
+        PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
+        assertNull( pi.getGroupId() );
+        assertNull( pi.getArtifactId() );
+        assertNull( pi.getVersion() );
+        assertEquals( "help", pi.getPrefix() );
+        
+        PrivateAccessor.setField( mojo, "plugin", "help2:::" );
+        pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
+        assertEquals( "help2", pi.getPrefix() );
+    }
+    
+    public void testParsePluginInfoPluginGA()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PrivateAccessor.setField( mojo, "plugin", "org.test:test" );
+        PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
+        assertEquals( "org.test", pi.getGroupId() );
+        assertEquals( "test", pi.getArtifactId() );
+        assertNull( pi.getVersion() );
+        assertNull( pi.getPrefix() );
+    }
+    
+    public void testParsePluginInfoPluginGAV()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PrivateAccessor.setField( mojo, "plugin", "org.test:test:1.0" );
+        PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
+        assertEquals( "org.test", pi.getGroupId() );
+        assertEquals( "test", pi.getArtifactId() );
+        assertEquals( "1.0", pi.getVersion() );
+        assertNull( pi.getPrefix() );
+    }
+    
+    public void testParsePluginInfoPluginIncorrect()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PrivateAccessor.setField( mojo, "plugin", "org.test:test:1.0:invalid" );
+        try
+        {
+            PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
+            fail();
+        }
+        catch ( Exception e )
+        {
+            // expected
+        }
+    }
+    
+    public void testLookupPluginDescriptorPrefixWithVersion()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+
+        PluginInfo pi = new PluginInfo();
+        pi.setPrefix( "help" );
+        pi.setVersion( "1.0" );
+
+        Plugin plugin = new Plugin();
+        plugin.setGroupId( "org.test" );
+        plugin.setArtifactId( "test" );
+        
+        PluginDescriptor pd = new PluginDescriptor();
+
+        MojoDescriptorCreator mojoDescriptorCreator = mock( MojoDescriptorCreator.class );
+        PluginVersionResolver pluginVersionResolver = mock( PluginVersionResolver.class );
+        MavenPluginManagerHelper pluginManager = mock( MavenPluginManagerHelper.class );
+        MavenSession session = mock( MavenSession.class );
+        PrivateAccessor.setField( mojo, "mojoDescriptorCreator", mojoDescriptorCreator );
+        PrivateAccessor.setField( mojo, "pluginVersionResolver", pluginVersionResolver );
+        PrivateAccessor.setField( mojo, "pluginManager", pluginManager );
+        PrivateAccessor.setField( mojo, "session", session );
+        when( mojoDescriptorCreator.findPluginForPrefix( "help", session ) ).thenReturn( plugin );
+        when( pluginManager.getPluginDescriptor( any( Plugin.class ), eq( session ) ) ).thenReturn( pd );
+
+        PluginDescriptor returned =
+            (PluginDescriptor) PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
+                                                       new Object[] { pi } );
+        assertEquals( pd, returned );
+
+        verify( mojoDescriptorCreator ).findPluginForPrefix( "help", session );
+        verify( pluginVersionResolver, never() ).resolve( any( PluginVersionRequest.class ) );
+        ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass( Plugin.class );
+        verify( pluginManager ).getPluginDescriptor( argument.capture(), eq( session ) );
+        Plugin capturedPlugin = argument.getValue();
+        assertEquals( "org.test", capturedPlugin.getGroupId() );
+        assertEquals( "test", capturedPlugin.getArtifactId() );
+        assertEquals( "1.0", capturedPlugin.getVersion() );
+    }
+    
+    public void testLookupPluginDescriptorPrefixWithoutVersion()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+
+        PluginInfo pi = new PluginInfo();
+        pi.setPrefix( "help" );
+
+        Plugin plugin = new Plugin();
+        plugin.setGroupId( "org.test" );
+        plugin.setArtifactId( "test" );
+        
+        PluginDescriptor pd = new PluginDescriptor();
+
+        MojoDescriptorCreator mojoDescriptorCreator = mock( MojoDescriptorCreator.class );
+        PluginVersionResolver pluginVersionResolver = mock( PluginVersionResolver.class );
+        MavenPluginManagerHelper pluginManager = mock( MavenPluginManagerHelper.class );
+        PluginVersionResult versionResult = mock( PluginVersionResult.class );
+        MavenSession session = mock( MavenSession.class );
+        PrivateAccessor.setField( mojo, "mojoDescriptorCreator", mojoDescriptorCreator );
+        PrivateAccessor.setField( mojo, "pluginVersionResolver", pluginVersionResolver );
+        PrivateAccessor.setField( mojo, "pluginManager", pluginManager );
+        PrivateAccessor.setField( mojo, "session", session );
+        when( mojoDescriptorCreator.findPluginForPrefix( "help", session ) ).thenReturn( plugin );
+        when( pluginVersionResolver.resolve( any( PluginVersionRequest.class ) ) ).thenReturn( versionResult );
+        when( versionResult.getVersion() ).thenReturn( "1.0" );
+        when( pluginManager.getPluginDescriptor( any( Plugin.class ), eq( session ) ) ).thenReturn( pd );
+
+        PluginDescriptor returned =
+            (PluginDescriptor) PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
+                                                       new Object[] { pi } );
+        assertEquals( pd, returned );
+
+        verify( mojoDescriptorCreator ).findPluginForPrefix( "help", session );
+        ArgumentCaptor<PluginVersionRequest> versionArgument = ArgumentCaptor.forClass( PluginVersionRequest.class );
+        verify( pluginVersionResolver ).resolve( versionArgument.capture() );
+        assertEquals( "org.test", versionArgument.getValue().getGroupId() );
+        assertEquals( "test", versionArgument.getValue().getArtifactId() );
+        ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass( Plugin.class );
+        verify( pluginManager ).getPluginDescriptor( argument.capture(), eq( session ) );
+        Plugin capturedPlugin = argument.getValue();
+        assertEquals( "org.test", capturedPlugin.getGroupId() );
+        assertEquals( "test", capturedPlugin.getArtifactId() );
+        assertEquals( "1.0", capturedPlugin.getVersion() );
+    }
+    
+    public void testLookupPluginDescriptorGAV()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+
+        PluginInfo pi = new PluginInfo();
+        pi.setGroupId( "org.test" );
+        pi.setArtifactId( "test" );
+        pi.setVersion( "1.0" );
+
+        PluginDescriptor pd = new PluginDescriptor();
+
+        MojoDescriptorCreator mojoDescriptorCreator = mock( MojoDescriptorCreator.class );
+        PluginVersionResolver pluginVersionResolver = mock( PluginVersionResolver.class );
+        MavenPluginManagerHelper pluginManager = mock( MavenPluginManagerHelper.class );
+        MavenSession session = mock( MavenSession.class );
+        PrivateAccessor.setField( mojo, "mojoDescriptorCreator", mojoDescriptorCreator );
+        PrivateAccessor.setField( mojo, "pluginVersionResolver", pluginVersionResolver );
+        PrivateAccessor.setField( mojo, "pluginManager", pluginManager );
+        PrivateAccessor.setField( mojo, "session", session );
+        when( pluginManager.getPluginDescriptor( any( Plugin.class ), eq( session ) ) ).thenReturn( pd );
+
+        PluginDescriptor returned =
+            (PluginDescriptor) PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
+                                                       new Object[] { pi } );
+        assertEquals( pd, returned );
+
+        verify( mojoDescriptorCreator, never() ).findPluginForPrefix( any( String.class ), any( MavenSession.class ) );
+        verify( pluginVersionResolver, never() ).resolve( any( PluginVersionRequest.class ) );
+        ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass( Plugin.class );
+        verify( pluginManager ).getPluginDescriptor( argument.capture(), eq( session ) );
+        Plugin capturedPlugin = argument.getValue();
+        assertEquals( "org.test", capturedPlugin.getGroupId() );
+        assertEquals( "test", capturedPlugin.getArtifactId() );
+        assertEquals( "1.0", capturedPlugin.getVersion() );
+    }
+
+    public void testLookupPluginDescriptorGMissingA()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PluginInfo pi = new PluginInfo();
+        pi.setGroupId( "org.test" );
+        try
+        {
+            PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
+                                    new Object[] { pi } );
+            fail();
+        }
+        catch ( Exception e )
+        {
+            assertTrue( e.getMessage().startsWith( "You must specify either" ) );
+        }
+    }
+    
+    public void testLookupPluginDescriptorAMissingG()
+        throws Throwable
+    {
+        DescribeMojo mojo = new DescribeMojo();
+        PluginInfo pi = new PluginInfo();
+        pi.setArtifactId( "test" );
+        try
+        {
+            PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
+                                    new Object[] { pi } );
+            fail();
+        }
+        catch ( Exception e )
+        {
+            assertTrue( e.getMessage().startsWith( "You must specify either" ) );
+        }
+    }
 
 }

Modified: maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/EvaluateMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/EvaluateMojoTest.java?rev=1769319&r1=1769318&r2=1769319&view=diff
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/EvaluateMojoTest.java (original)
+++ maven/plugins/trunk/maven-help-plugin/src/test/java/org/apache/maven/plugins/help/EvaluateMojoTest.java Fri Nov 11 17:13:13 2016
@@ -38,6 +38,7 @@ import org.apache.maven.settings.Setting
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
 import org.codehaus.plexus.components.interactivity.InputHandler;
 import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.LoggerManager;
 
 /**
  * Test class for the evaluate mojo of the Help Plugin.
@@ -53,7 +54,8 @@ public class EvaluateMojoTest
         throws Exception
     {
         super.setUp();
-        interceptingLogger = new InterceptingLog( getContainer().getLoggerManager().getLoggerForComponent( Mojo.ROLE ) );
+        interceptingLogger =
+            new InterceptingLog( getContainer().lookup( LoggerManager.class ).getLoggerForComponent( Mojo.ROLE ) );
     }
 
     /**

Added: maven/plugins/trunk/maven-help-plugin/src/test/resources/unit/active-profiles/plugin-config.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-help-plugin/src/test/resources/unit/active-profiles/plugin-config.xml?rev=1769319&view=auto
==============================================================================
--- maven/plugins/trunk/maven-help-plugin/src/test/resources/unit/active-profiles/plugin-config.xml (added)
+++ maven/plugins/trunk/maven-help-plugin/src/test/resources/unit/active-profiles/plugin-config.xml Fri Nov 11 17:13:13 2016
@@ -0,0 +1,37 @@
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its.help</groupId>
+  <artifactId>active-profiles</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-help-plugin</artifactId>
+        <configuration>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-help-plugin/src/test/resources/unit/active-profiles/plugin-config.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-help-plugin/src/test/resources/unit/active-profiles/plugin-config.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision