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

[maven-dependency-tree] 01/01: [MSHARED-491] DependencyGraphBuilders shouldn't need reactorProjects for resolving dependencies

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

rfscholte pushed a commit to branch MSHARED-491
in repository https://gitbox.apache.org/repos/asf/maven-dependency-tree.git

commit b5e9f99802c45b4f0a526c506e11964a61211d89
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Jun 4 10:54:19 2021 +0200

    [MSHARED-491] DependencyGraphBuilders shouldn't need reactorProjects for resolving dependencies
---
 .../dependency/graph/DependencyGraphBuilder.java   | 17 +++--
 .../internal/DefaultDependencyGraphBuilder.java    | 20 +-----
 .../internal/Maven31DependencyGraphBuilder.java    | 81 ++-------------------
 .../internal/Maven3DependencyGraphBuilder.java     | 83 ++--------------------
 4 files changed, 17 insertions(+), 184 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
index e0e5fe9..cab4ce8 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
@@ -45,20 +45,19 @@ public interface DependencyGraphBuilder
         throws DependencyGraphBuilderException;
 
     /**
-     * Build the dependency graph, with a hack to include dependencies contained in the reactor projects
-     * but that are not yet compiled, which is the minimum prerequisite for Maven core's
-     * ReactorReader to find them. Notice that this hack hasn't been done for Maven 2.
-     * <p>Notice: If Maven core did collect instead of resolving dependencies (ie did not try to get the
-     * artifacts but only the poms), probably this hack wouldn't be necessary even for people requiring
-     * the dependency graph before compiling. TODO: for Maven 3, use Aether to collect dependencies.</p>
      *
      * @param buildingRequest the buildingRequest
      * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the reactor (can be <code>null</code>).
+     * @param reactorProjects ignored
      * @return the dependency graph
      * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     * @deprecated Use {@link #buildDependencyGraph(ProjectBuildingRequest, ArtifactFilter)} instead
      */
-    DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter,
+    @Deprecated
+    default DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter,
                                          Collection<MavenProject> reactorProjects )
-        throws DependencyGraphBuilderException;
+        throws DependencyGraphBuilderException 
+    {
+      return buildDependencyGraph( buildingRequest, filter );    
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
index 593c057..cccd577 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
@@ -34,8 +34,6 @@ import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
-import java.util.Collection;
-
 /**
  * Default dependency graph builder that detects current Maven version to delegate to either Maven 3.0 or 3.1+ specific
  * code.
@@ -64,22 +62,6 @@ public class DefaultDependencyGraphBuilder
     public DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( buildingRequest, filter, null );
-    }
-
-    /**
-     * Builds a dependency graph.
-     *
-     * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the reactor (can be <code>null</code>)
-     * @return DependencyNode containing the dependency graph.
-     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
-     */
-    @Override
-    public DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter,
-                                                Collection<MavenProject> reactorProjects )
-        throws DependencyGraphBuilderException
-    {
         try
         {
             String hint = isMaven31() ? "maven31" : "maven3";
@@ -95,7 +77,7 @@ public class DefaultDependencyGraphBuilder
                                 + effectiveGraphBuilder.getClass().getSimpleName() );
             }
 
-            return effectiveGraphBuilder.buildDependencyGraph( buildingRequest, filter, reactorProjects );
+            return effectiveGraphBuilder.buildDependencyGraph( buildingRequest, filter );
         }
         catch ( ComponentLookupException e )
         {
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
index 9e8089f..0b89e02 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
@@ -22,11 +22,8 @@ package org.apache.maven.shared.dependency.graph.internal;
 import static org.eclipse.aether.util.graph.manager.DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
@@ -93,24 +90,6 @@ public class Maven31DependencyGraphBuilder
     public DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( buildingRequest, filter, null );
-    }
-
-    /**
-     * Builds the dependency graph for Maven 3.1+, eventually hacking for collecting projects from
-     * reactor not yet built.
-     *
-     * @param buildingRequest the buildingRequest
-     * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the reactor (can be <code>null</code>).
-     * @return DependencyNode containing the dependency graph.
-     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
-     */
-    @Override
-    public DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter,
-                                                Collection<MavenProject> reactorProjects )
-        throws DependencyGraphBuilderException
-    {
         MavenProject project = buildingRequest.getProject();
 
         RepositorySystemSession session =
@@ -139,7 +118,7 @@ public class Maven31DependencyGraphBuilder
         };
         Invoker.invoke( request, "setResolutionFilter", DependencyFilter.class, collectFilter );
 
-        final DependencyResolutionResult result = resolveDependencies( request, reactorProjects );
+        final DependencyResolutionResult result = resolveDependencies( request );
         org.eclipse.aether.graph.DependencyNode graph =
             (org.eclipse.aether.graph.DependencyNode) Invoker.invoke( DependencyResolutionResult.class, result,
                                                                       "getDependencyGraph", exceptionHandler );
@@ -147,8 +126,7 @@ public class Maven31DependencyGraphBuilder
         return buildDependencyNode( null, graph, project.getArtifact(), filter );
     }
 
-    private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request,
-                                                            Collection<MavenProject> reactorProjects )
+    private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request )
         throws DependencyGraphBuilderException
     {
         try
@@ -157,62 +135,11 @@ public class Maven31DependencyGraphBuilder
         }
         catch ( DependencyResolutionException e )
         {
-            if ( reactorProjects == null )
-            {
-                throw new DependencyGraphBuilderException( "Could not resolve following dependencies: "
-                    + e.getResult().getUnresolvedDependencies(), e );
-            }
-
-            // try collecting from reactor
-            return collectDependenciesFromReactor( e, reactorProjects );
+            throw new DependencyGraphBuilderException( "Could not resolve following dependencies: "
+                + e.getResult().getUnresolvedDependencies(), e );
         }
     }
 
-    private DependencyResolutionResult collectDependenciesFromReactor( DependencyResolutionException e,
-                                                                       Collection<MavenProject> reactorProjects )
-        throws DependencyGraphBuilderException
-    {
-        DependencyResolutionResult result = e.getResult();
-
-        List<Dependency> reactorDeps = getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
-        result.getUnresolvedDependencies().removeAll( reactorDeps );
-        Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
-
-        if ( !result.getUnresolvedDependencies().isEmpty() )
-        {
-            throw new DependencyGraphBuilderException( "Could not resolve nor collect following dependencies: "
-                + result.getUnresolvedDependencies(), e );
-        }
-
-        return result;
-    }
-
-    private List<Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects, List<?> dependencies )
-    {
-        Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
-        for ( MavenProject project : reactorProjects )
-        {
-            reactorProjectsIds.add( new ArtifactKey( project ) );
-        }
-
-        List<Dependency> reactorDeps = new ArrayList<Dependency>();
-        for ( Object untypedDependency : dependencies )
-        {
-            Dependency dependency = (Dependency) untypedDependency;
-            org.eclipse.aether.artifact.Artifact depArtifact = dependency.getArtifact();
-
-            ArtifactKey key =
-                new ArtifactKey( depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion() );
-
-            if ( reactorProjectsIds.contains( key ) )
-            {
-                reactorDeps.add( dependency );
-            }
-        }
-
-        return reactorDeps;
-    }
-
     private Artifact getDependencyArtifact( Dependency dep )
     {
         org.eclipse.aether.artifact.Artifact artifact = dep.getArtifact();
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
index 3eedffd..b22ec44 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
@@ -20,11 +20,8 @@ package org.apache.maven.shared.dependency.graph.internal;
  */
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
@@ -73,24 +70,6 @@ public class Maven3DependencyGraphBuilder
     public DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( buildingRequest, filter, null );
-    }
-
-    /**
-     * Builds the dependency graph for Maven 3, eventually hacking for collecting projects from
-     * reactor not yet built.
-     *
-     * @param buildingRequest the buildingRequest
-     * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the reactor (can be <code>null</code>).
-     * @return DependencyNode containing the dependency graph.
-     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
-     */
-    @Override
-    public DependencyNode buildDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter,
-                                                Collection<MavenProject> reactorProjects )
-        throws DependencyGraphBuilderException
-    {
         MavenProject project = buildingRequest.getProject();
 
         DependencyResolutionRequest request =
@@ -108,13 +87,12 @@ public class Maven3DependencyGraphBuilder
         };
         request.setResolutionFilter( collectFilter );
 
-        DependencyResolutionResult result = resolveDependencies( request, reactorProjects );
+        DependencyResolutionResult result = resolveDependencies( request );
 
         return buildDependencyNode( null, result.getDependencyGraph(), project.getArtifact(), filter );
     }
 
-    private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request,
-                                                            Collection<MavenProject> reactorProjects )
+    private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request )
         throws DependencyGraphBuilderException
     {
         try
@@ -123,62 +101,9 @@ public class Maven3DependencyGraphBuilder
         }
         catch ( DependencyResolutionException e )
         {
-            if ( reactorProjects == null )
-            {
-                throw new DependencyGraphBuilderException( "Could not resolve following dependencies: "
-                    + e.getResult().getUnresolvedDependencies(), e );
-            }
-
-            // try collecting from reactor
-            return collectDependenciesFromReactor( e, reactorProjects );
-        }
-    }
-
-    private DependencyResolutionResult collectDependenciesFromReactor( DependencyResolutionException e,
-                                                                       Collection<MavenProject> reactorProjects )
-        throws DependencyGraphBuilderException
-    {
-        DependencyResolutionResult result = e.getResult();
-
-        List<Dependency> reactorDeps = getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
-
-        result.getUnresolvedDependencies().removeAll( reactorDeps );
-        result.getResolvedDependencies().addAll( reactorDeps );
-
-        if ( !result.getUnresolvedDependencies().isEmpty() )
-        {
-            throw new DependencyGraphBuilderException( "Could not resolve nor collect following dependencies: "
-                + result.getUnresolvedDependencies(), e );
+            throw new DependencyGraphBuilderException( "Could not resolve following dependencies: "
+                + e.getResult().getUnresolvedDependencies(), e );
         }
-
-        return result;
-    }
-
-    private List<org.sonatype.aether.graph.Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects,
-                                                                               List<?> dependencies )
-    {
-        Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
-        for ( MavenProject project : reactorProjects )
-        {
-            reactorProjectsIds.add( new ArtifactKey( project ) );
-        }
-
-        List<Dependency> reactorDeps = new ArrayList<Dependency>();
-        for ( Object untypedDependency : dependencies )
-        {
-            Dependency dependency = (Dependency) untypedDependency;
-            org.sonatype.aether.artifact.Artifact depArtifact = dependency.getArtifact();
-
-            ArtifactKey key =
-                new ArtifactKey( depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion() );
-
-            if ( reactorProjectsIds.contains( key ) )
-            {
-                reactorDeps.add( dependency );
-            }
-        }
-
-        return reactorDeps;
     }
 
     private Artifact getDependencyArtifact( Dependency dep )