You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2021/04/08 20:12:31 UTC

[maven-dependency-plugin] branch MDEP-82 created (now 4f22aa7)

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a change to branch MDEP-82
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git.


      at 4f22aa7  [MDEP-82] - resolve plugin dependencies

This branch includes the following new commits:

     new 4f22aa7  [MDEP-82] - resolve plugin dependencies

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven-dependency-plugin] 01/01: [MDEP-82] - resolve plugin dependencies

Posted by sl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch MDEP-82
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git

commit 4f22aa7eab0ae9467c388a127d177adc429ee313
Author: Matthias Rosenstock <ma...@berla.net>
AuthorDate: Tue Mar 30 13:48:54 2021 +0200

    [MDEP-82] - resolve plugin dependencies
---
 .../dependency/resolvers/ResolvePluginsMojo.java   | 132 ++++++++++++++++-----
 1 file changed, 104 insertions(+), 28 deletions(-)

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 c40c427..a12e8e9 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 @@ package org.apache.maven.plugins.dependency.resolvers;
  * 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.artifact.filter.collection.FilterArtifacts;
 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 @@ import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverE
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  * @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 @@ public class ResolvePluginsMojo
     {
         try
         {
+            typeRegistry = RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager );
             // ideally this should either be DependencyCoordinates or DependencyNode
-            final Set<Artifact> plugins = resolvePluginArtifacts();
+            final Map<String, Plugin> plugins = resolvePlugins();
+            final Map<String, Artifact> 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<String, Artifact> plugin : resolvedArtifacts.entrySet() )
                 {
                     String artifactFilename = null;
                     if ( outputAbsoluteArtifactFilename )
@@ -85,7 +111,7 @@ public class ResolvePluginsMojo
                         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 @@ public class ResolvePluginsMojo
                         }
                     }
 
-                    String id = plugin.toString();
+                    String id = plugin.getKey();
                     sb.append( "   " )
                             .append( id )
                             .append( outputAbsoluteArtifactFilename ? ":" + artifactFilename : "" )
@@ -103,11 +129,23 @@ public class ResolvePluginsMojo
                     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<Artifact> 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 @@ public class ResolvePluginsMojo
     /**
      * 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<Artifact> resolvePluginArtifacts()
+    protected Map<String, Plugin> resolvePlugins()
         throws ArtifactFilterException, ArtifactResolverException
     {
-        final Set<Artifact> plugins = getProject().getPluginArtifacts();
-        final Set<Artifact> reports = getProject().getReportArtifacts();
+        Set<Plugin> plugins = new LinkedHashSet<>( getProject().getBuildPlugins() );
+
+        Reporting reporting = getProject().getReporting();
+        if ( reporting != null )
+        {
+            List<ReportPlugin> 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<Artifact> artifacts = new LinkedHashSet<>();
-        artifacts.addAll( reports );
-        artifacts.addAll( plugins );
+        HashMap<String, Plugin> result = new HashMap<>( plugins.size() );
+        for ( Plugin plugin : plugins )
+        {
+            result.put( plugin.getId(), plugin );
+        }
+
+        return UnmodifiableMap.unmodifiableMap( result );
+    }
+
+    private Map<String, Artifact> fetchArtifacts( Collection<Plugin> plugins )
+        throws ArtifactResolverException, ArtifactFilterException
+    {
+        Set<Artifact> 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<Artifact> resolvedArtifacts = new LinkedHashSet<>( artifacts.size() );
+        Map<String, Artifact> 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 @@ public class ResolvePluginsMojo
             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