diff --git a/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java b/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java
index c40c4276e0..a12e8e9236 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java
@@ -19,12 +19,15 @@
* under the License.
*/
-import java.io.IOException;
-import java.util.LinkedHashSet;
-import java.util.Objects;
-import java.util.Set;
-
+import org.apache.commons.collections4.map.UnmodifiableMap;
+import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Reporting;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
@@ -37,6 +40,18 @@
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.graph.Dependency;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
/**
* Goal that resolves all project plugins and reports and their dependencies.
@@ -44,14 +59,23 @@
* @author Brian Fox
* @since 2.0
*/
-@Mojo( name = "resolve-plugins", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true )
+//CHECKSTYLE_OFF: LineLength
+@Mojo( name = "resolve-plugins", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresOnline = true, threadSafe = true )
+//CHECKSTYLE_ON: LineLength
public class ResolvePluginsMojo
extends AbstractResolveMojo
{
+ /**
+ * Maven artifact handler manager
+ */
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
@Parameter( property = "outputEncoding", defaultValue = "${project.reporting.outputEncoding}" )
private String outputEncoding;
+ private ArtifactTypeRegistry typeRegistry;
+
/**
* Main entry into mojo. Gets the list of dependencies and iterates through displaying the resolved version.
*
@@ -63,21 +87,23 @@ protected void doExecute()
{
try
{
+ typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
// ideally this should either be DependencyCoordinates or DependencyNode
- final Set plugins = resolvePluginArtifacts();
+ final Map plugins = resolvePlugins();
+ final Map resolvedArtifacts = fetchArtifacts( plugins.values() );
StringBuilder sb = new StringBuilder();
sb.append( System.lineSeparator() );
sb.append( "The following plugins have been resolved:" );
sb.append( System.lineSeparator() );
- if ( plugins == null || plugins.isEmpty() )
+ if ( plugins.isEmpty() )
{
sb.append( " none" );
sb.append( System.lineSeparator() );
}
else
{
- for ( Artifact plugin : plugins )
+ for ( Map.Entry plugin : resolvedArtifacts.entrySet() )
{
String artifactFilename = null;
if ( outputAbsoluteArtifactFilename )
@@ -85,7 +111,7 @@ protected void doExecute()
try
{
// we want to print the absolute file name here
- artifactFilename = plugin.getFile().getAbsoluteFile().getPath();
+ artifactFilename = plugin.getValue().getFile().getAbsoluteFile().getPath();
}
catch ( NullPointerException e )
{
@@ -94,7 +120,7 @@ protected void doExecute()
}
}
- String id = plugin.toString();
+ String id = plugin.getKey();
sb.append( " " )
.append( id )
.append( outputAbsoluteArtifactFilename ? ":" + artifactFilename : "" )
@@ -103,11 +129,23 @@ protected void doExecute()
if ( !excludeTransitive )
{
DefaultDependableCoordinate pluginCoordinate = new DefaultDependableCoordinate();
- pluginCoordinate.setGroupId( plugin.getGroupId() );
- pluginCoordinate.setArtifactId( plugin.getArtifactId() );
- pluginCoordinate.setVersion( plugin.getVersion() );
+ pluginCoordinate.setGroupId( plugin.getValue().getGroupId() );
+ pluginCoordinate.setArtifactId( plugin.getValue().getArtifactId() );
+ pluginCoordinate.setVersion( plugin.getValue().getVersion() );
- for ( final Artifact artifact : resolveArtifactDependencies( pluginCoordinate ) )
+ Set artifacts = resolveArtifactDependencies( pluginCoordinate );
+ for ( org.apache.maven.model.Dependency d : plugins.get( plugin.getKey() ).getDependencies() )
+ {
+ Dependency dependency = RepositoryUtils.toDependency( d, typeRegistry );
+ Artifact artifact = RepositoryUtils.toArtifact( dependency.getArtifact() );
+
+ ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest();
+ getArtifactResolver().resolveArtifact( buildingRequest, artifact );
+
+ artifacts.add( artifact );
+ }
+
+ for ( final Artifact artifact : artifacts )
{
artifactFilename = null;
if ( outputAbsoluteArtifactFilename )
@@ -155,26 +193,63 @@ protected void doExecute()
/**
* This method resolves the plugin artifacts from the project.
*
- * @return set of resolved plugin artifacts
- * @throws ArtifactFilterException in case of an error
- * @throws ArtifactResolverException in case of an error
+ * @return map of resolved plugins
*/
- protected Set resolvePluginArtifacts()
+ protected Map resolvePlugins()
throws ArtifactFilterException, ArtifactResolverException
{
- final Set plugins = getProject().getPluginArtifacts();
- final Set reports = getProject().getReportArtifacts();
+ Set plugins = new LinkedHashSet<>( getProject().getBuildPlugins() );
+
+ Reporting reporting = getProject().getReporting();
+ if ( reporting != null )
+ {
+ List reportPlugins = reporting.getPlugins();
+ for ( ReportPlugin reportPlugin : reportPlugins )
+ {
+ // Conversion borrowed from
+ // org.apache.maven.project.MavenProject#getReportArtifacts
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( reportPlugin.getGroupId() );
+ plugin.setArtifactId( reportPlugin.getArtifactId() );
+ plugin.setVersion( reportPlugin.getVersion() );
+ plugins.add( plugin );
+ }
+ }
- Set artifacts = new LinkedHashSet<>();
- artifacts.addAll( reports );
- artifacts.addAll( plugins );
+ HashMap result = new HashMap<>( plugins.size() );
+ for ( Plugin plugin : plugins )
+ {
+ result.put( plugin.getId(), plugin );
+ }
+
+ return UnmodifiableMap.unmodifiableMap( result );
+ }
+
+ private Map fetchArtifacts( Collection plugins )
+ throws ArtifactResolverException, ArtifactFilterException
+ {
+ Set artifacts = new LinkedHashSet<>( plugins.size() );
+ for ( Plugin plugin : plugins )
+ {
+ artifacts.add(
+ new DefaultArtifact(
+ plugin.getGroupId(),
+ plugin.getArtifactId(),
+ plugin.getVersion(),
+ Artifact.SCOPE_RUNTIME,
+ "maven-plugin",
+ null,
+ artifactHandlerManager.getArtifactHandler( "maven-plugin" )
+ )
+ );
+ }
final FilterArtifacts filter = getArtifactsFilter();
artifacts = filter.filter( artifacts );
- Set resolvedArtifacts = new LinkedHashSet<>( artifacts.size() );
+ Map resolvedArtifacts = new HashMap<>( artifacts.size() );
// final ArtifactFilter filter = getPluginFilter();
- for ( final Artifact artifact : new LinkedHashSet<>( artifacts ) )
+ for ( final Artifact artifact : artifacts )
{
// if ( !filter.include( artifact ) )
// {
@@ -193,9 +268,10 @@ protected Set resolvePluginArtifacts()
ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest();
// resolve the new artifact
- resolvedArtifacts.add( getArtifactResolver().resolveArtifact( buildingRequest, artifact ).getArtifact() );
+ Artifact resolved = getArtifactResolver().resolveArtifact( buildingRequest, artifact ).getArtifact();
+ resolvedArtifacts.put( ArtifactUtils.key( resolved ), resolved );
}
- return artifacts;
+ return resolvedArtifacts;
}
@Override