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:15:33 UTC

[maven-dependency-plugin] 01/02: MDEP-726: dependency:copy finds missing versions in TRANSITIVE dependencies

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

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

commit 4f0507fc33f7c38e201a70be23f9d8816a2842ae
Author: Markus KARG <ka...@quipsy.de>
AuthorDate: Wed Oct 7 16:15:09 2020 +0200

    MDEP-726: dependency:copy finds missing versions in TRANSITIVE dependencies
    
    Signed-off-by: Markus KARG <ma...@headcrashing.eu>
---
 .../AbstractFromConfigurationMojo.java             | 51 ++++++++++++----------
 1 file changed, 27 insertions(+), 24 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/dependency/fromConfiguration/AbstractFromConfigurationMojo.java b/src/main/java/org/apache/maven/plugins/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
index b41a428..3417fbd 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/fromConfiguration/AbstractFromConfigurationMojo.java
@@ -20,14 +20,20 @@ package org.apache.maven.plugins.dependency.fromConfiguration;
  */
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
+import javax.inject.Inject;
+
+import org.apache.maven.ProjectDependenciesResolver;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.model.Dependency;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
@@ -35,7 +41,6 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.dependency.AbstractDependencyMojo;
 import org.apache.maven.plugins.dependency.utils.DependencyUtil;
 import org.apache.maven.plugins.dependency.utils.filters.ArtifactItemFilter;
-import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
 import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
@@ -270,33 +275,31 @@ public abstract class AbstractFromConfigurationMojo
     private void fillMissingArtifactVersion( ArtifactItem artifact )
         throws MojoExecutionException
     {
-        MavenProject project = getProject();
-        List<Dependency> deps = project.getDependencies();
-        List<Dependency> depMngt = project.getDependencyManagement() == null ? Collections.<Dependency>emptyList()
-                        : project.getDependencyManagement().getDependencies();
-
-        if ( !findDependencyVersion( artifact, deps, false )
-            && ( project.getDependencyManagement() == null || !findDependencyVersion( artifact, depMngt, false ) )
-            && !findDependencyVersion( artifact, deps, true )
-            && ( project.getDependencyManagement() == null || !findDependencyVersion( artifact, depMngt, true ) ) )
+        try
+        {
+            if ( !this.findDependencyVersion( artifact, false ) && !this.findDependencyVersion( artifact, true ) )
+            {
+                throw new MojoExecutionException( "Unable to find artifact version of " + artifact.getGroupId() + ":"
+                    + artifact.getArtifactId() + " in transitively resolved dependencies." );
+            }
+        }
+        catch ( final ArtifactResolutionException | ArtifactNotFoundException e )
         {
-            throw new MojoExecutionException( "Unable to find artifact version of " + artifact.getGroupId() + ":"
-                + artifact.getArtifactId() + " in either dependency list or in project's dependency management." );
+            throw new MojoExecutionException( "Failed to transitively resolve project dependencies.", e );
         }
     }
 
-    /**
-     * Tries to find missing version from a list of dependencies. If found, the artifact is updated with the correct
-     * version.
-     *
-     * @param artifact representing configured file.
-     * @param dependencies list of dependencies to search.
-     * @param looseMatch only look at artifactId and groupId
-     * @return the found dependency
-     */
-    private boolean findDependencyVersion( ArtifactItem artifact, List<Dependency> dependencies, boolean looseMatch )
+    @Inject
+    private ProjectDependenciesResolver resolver;
+
+    private boolean findDependencyVersion( final ArtifactItem artifact, boolean looseMatch )
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
-        for ( Dependency dependency : dependencies )
+        final Set<Artifact> resolvedArtifacts =
+            this.resolver.resolve( this.getProject(),
+                                   Arrays.asList( "compile", "provided", "runtime", "test", "system", "import" ),
+                                   this.session );
+        for ( final Artifact dependency : resolvedArtifacts )
         {
             if ( Objects.equals( dependency.getArtifactId(), artifact.getArtifactId() )
                 && Objects.equals( dependency.getGroupId(), artifact.getGroupId() )