[MDEP-726] dependency:copy finds missing versions in TRANSITIVE dependencies

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 @@
  */
 
 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.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 @@
     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
         {
-            throw new MojoExecutionException( "Unable to find artifact version of " + artifact.getGroupId() + ":"
-                + artifact.getArtifactId() + " in either dependency list or in project's dependency management." );
+            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( "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() )