Use Model instead of ProjectCoordinate so we have direct access to dependencies and dependencyMangement.

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1752215 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java
index 751a1a2..4a07626 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java
@@ -20,9 +20,9 @@
  */

 

 import org.apache.maven.model.Dependency;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

-import org.apache.maven.shared.project.ProjectCoordinate;

 

 /**

  * Will only download the pom files when not available, never the artifact. 

@@ -47,7 +47,7 @@
     CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )

                     throws DependencyCollectorException;

 

-    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, ProjectCoordinate root )

+    CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )

                     throws DependencyCollectorException;

 

 }

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java
index c1d8843..19bdc32 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java
@@ -20,12 +20,12 @@
  */

 

 import org.apache.maven.model.Dependency;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

 import org.apache.maven.shared.dependencies.collect.CollectorResult;

 import org.apache.maven.shared.dependencies.collect.DependencyCollector;

 import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;

-import org.apache.maven.shared.project.ProjectCoordinate;

 import org.codehaus.plexus.PlexusConstants;

 import org.codehaus.plexus.PlexusContainer;

 import org.codehaus.plexus.component.annotations.Component;

@@ -81,7 +81,7 @@
     }

     

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, ProjectCoordinate root )

+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )

         throws DependencyCollectorException

     {

         try

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java
index 20b8f95..3ba098e 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java
@@ -19,17 +19,18 @@
  * under the License.

  */

 

+import java.util.ArrayList;

 import java.util.List;

 

 import org.apache.maven.RepositoryUtils;

 import org.apache.maven.artifact.handler.ArtifactHandler;

 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

 import org.apache.maven.shared.dependencies.collect.CollectorResult;

 import org.apache.maven.shared.dependencies.collect.DependencyCollector;

 import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;

-import org.apache.maven.shared.project.ProjectCoordinate;

 import org.codehaus.plexus.component.annotations.Component;

 import org.codehaus.plexus.component.annotations.Requirement;

 import org.sonatype.aether.RepositorySystem;

@@ -64,16 +65,15 @@
         throws DependencyCollectorException

     {

         ArtifactTypeRegistry typeRegistry =

-            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

-                                                   ArtifactHandlerManager.class, artifactHandlerManager );

+                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

+                                                               ArtifactHandlerManager.class, artifactHandlerManager );

 

-        Class<?>[] argClasses = new Class<?>[] { Dependency.class, ArtifactTypeRegistry.class };

-        Object[] args = new Object[] { root, typeRegistry };

-        Dependency aetherRoot = (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );

+        CollectRequest request = new CollectRequest();

+        request.setRoot( toDependency( root, typeRegistry ) );

 

-        return collectDependencies( buildingRequest, aetherRoot );

+        return collectDependencies( buildingRequest, request );

     }

-    

+

     @Override

     public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )

         throws DependencyCollectorException

@@ -85,13 +85,14 @@
         Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),

                                                        extension, root.getVersion() );

         

-        Dependency aetherRoot = new Dependency( aetherArtifact, null );

+        CollectRequest request = new CollectRequest();

+        request.setRoot( new Dependency( aetherArtifact, null ) );

 

-        return collectDependencies( buildingRequest, aetherRoot );

+        return collectDependencies( buildingRequest, request );

     }

     

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, ProjectCoordinate root )

+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )

         throws DependencyCollectorException

     {

         // Are there examples where packaging and type are NOT in sync

@@ -102,20 +103,42 @@
         Artifact aetherArtifact =

             new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );

         

-        Dependency aetherRoot = new Dependency( aetherArtifact, null );

+        CollectRequest request = new CollectRequest();

+        request.setRoot( new Dependency( aetherArtifact, null ) );

 

-        return collectDependencies( buildingRequest, aetherRoot );

+        ArtifactTypeRegistry typeRegistry =

+                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

+                                                               ArtifactHandlerManager.class, artifactHandlerManager );

+

+        List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );

+        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )

+        {

+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+        }

+        request.setDependencies( aetherDependencies );

+

+        if ( root.getDependencyManagement() != null )

+        {

+            List<Dependency> aetherManagerDependencies =

+                new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );

+            

+            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )

+            {

+                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+            }

+            

+            request.setManagedDependencies( aetherManagerDependencies );

+        }

+        

+        return collectDependencies( buildingRequest, request );

     }

 

-    private CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest, Dependency aetherRoot )

+    private CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest, CollectRequest request )

         throws DependencyCollectorException

     {

         RepositorySystemSession session =

             (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );

 

-        CollectRequest request = new CollectRequest();

-        request.setRoot( aetherRoot );

-

         @SuppressWarnings( "unchecked" )

         List<RemoteRepository> aetherRepositories =

             (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,

@@ -132,4 +155,14 @@
         }

     }

 

+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,

+                                            ArtifactTypeRegistry typeRegistry )

+        throws DependencyCollectorException

+    {

+        Class<?>[] argClasses = new Class<?>[] { Dependency.class, ArtifactTypeRegistry.class };

+

+        Object[] args = new Object[] { mavenDependency, typeRegistry };

+

+        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );

+    }                

 }

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java
index b42b96a..9b0a9db 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java
@@ -19,17 +19,18 @@
  * under the License.

  */

 

+import java.util.ArrayList;

 import java.util.List;

 

 import org.apache.maven.RepositoryUtils;

 import org.apache.maven.artifact.handler.ArtifactHandler;

 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

 import org.apache.maven.shared.dependencies.collect.CollectorResult;

 import org.apache.maven.shared.dependencies.collect.DependencyCollector;

 import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;

-import org.apache.maven.shared.project.ProjectCoordinate;

 import org.codehaus.plexus.component.annotations.Component;

 import org.codehaus.plexus.component.annotations.Requirement;

 import org.eclipse.aether.RepositorySystem;

@@ -64,16 +65,15 @@
         throws DependencyCollectorException

     {

         ArtifactTypeRegistry typeRegistry =

-            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

-                                                   ArtifactHandlerManager.class, artifactHandlerManager );

+                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

+                                                               ArtifactHandlerManager.class, artifactHandlerManager );

 

-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };

-        Object[] args = new Object[] { root, typeRegistry };

-        Dependency aetherRoot = (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );

+        CollectRequest request = new CollectRequest();

+        request.setRoot( toDependency( root, typeRegistry ) );

 

-        return collectDependencies( buildingRequest, aetherRoot );

+        return collectDependencies( buildingRequest, request );

     }

-    

+

     @Override

     public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )

         throws DependencyCollectorException

@@ -85,13 +85,14 @@
         Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),

                                                        extension, root.getVersion() );

         

-        Dependency aetherRoot = new Dependency( aetherArtifact, null );

+        CollectRequest request = new CollectRequest();

+        request.setRoot( new Dependency( aetherArtifact, null ) );

 

-        return collectDependencies( buildingRequest, aetherRoot );

+        return collectDependencies( buildingRequest, request );

     }

     

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, ProjectCoordinate root )

+    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )

         throws DependencyCollectorException

     {

         // Are there examples where packaging and type are NOT in sync

@@ -102,17 +103,39 @@
         Artifact aetherArtifact =

             new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );

         

-        Dependency aetherRoot = new Dependency( aetherArtifact, null );

+        CollectRequest request = new CollectRequest();

+        request.setRoot( new Dependency( aetherArtifact, null ) );

+        

+        ArtifactTypeRegistry typeRegistry =

+                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

+                                                               ArtifactHandlerManager.class, artifactHandlerManager );

 

-        return collectDependencies( buildingRequest, aetherRoot );

+        List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );

+        for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )

+        {

+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+        }

+        request.setDependencies( aetherDependencies );

+

+        if ( root.getDependencyManagement() != null )

+        {

+            List<Dependency> aetherManagerDependencies =

+                new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );

+            

+            for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )

+            {

+                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+            }

+            

+            request.setManagedDependencies( aetherManagerDependencies );

+        }

+

+        return collectDependencies( buildingRequest, request );

     }

 

-    private CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency aetherRoot )

+    private CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, CollectRequest request )

         throws DependencyCollectorException

     {

-        CollectRequest request = new CollectRequest();

-        request.setRoot( aetherRoot );

-

         RepositorySystemSession session =

             (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );

 

@@ -132,4 +155,13 @@
         }

     }

 

+    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )

+                    throws DependencyCollectorException

+    {

+        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };

+

+        Object[] args = new Object[] { root, typeRegistry };

+

+        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );

+    }

 }

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java
index 262b0cf..dd3c8cd 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java
@@ -22,11 +22,11 @@
 import java.util.Collection;

 

 import org.apache.maven.model.Dependency;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;

 import org.apache.maven.shared.artifact.resolve.ArtifactResult;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

-import org.apache.maven.shared.project.ProjectCoordinate;

 

 /**

  * 

@@ -50,7 +50,7 @@
                                                   TransformableFilter filter ) throws DependencyResolverException;

     

     Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, 

-                                                  ProjectCoordinate coordinate,

+                                                  Model model,

                                                   TransformableFilter filter ) throws DependencyResolverException;

 

     /**

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java
index b957e1e..a58a80a 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java
@@ -22,13 +22,13 @@
 import java.util.Collection;

 

 import org.apache.maven.model.Dependency;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;

 import org.apache.maven.shared.artifact.resolve.ArtifactResult;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

 import org.apache.maven.shared.dependencies.resolve.DependencyResolver;

 import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;

-import org.apache.maven.shared.project.ProjectCoordinate;

 import org.codehaus.plexus.PlexusConstants;

 import org.codehaus.plexus.PlexusContainer;

 import org.codehaus.plexus.component.annotations.Component;

@@ -88,7 +88,7 @@
     

     @Override

     public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,

-                                                         ProjectCoordinate coordinate, TransformableFilter filter )

+                                                         Model model, TransformableFilter filter )

         throws DependencyResolverException

     {

         try

@@ -97,7 +97,7 @@
 

             DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint );

 

-            return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinate, filter );

+            return effectiveArtifactResolver.resolveDependencies( buildingRequest, model, filter );

         }

         catch ( ComponentLookupException e )

         {

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30DependencyResolver.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30DependencyResolver.java
index 558000d..fb2ebd1 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30DependencyResolver.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30DependencyResolver.java
@@ -27,13 +27,14 @@
 import org.apache.maven.RepositoryUtils;

 import org.apache.maven.artifact.handler.ArtifactHandler;

 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;

+import org.apache.maven.model.DependencyManagement;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;

 import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

 import org.apache.maven.shared.dependencies.resolve.DependencyResolver;

 import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;

-import org.apache.maven.shared.project.ProjectCoordinate;

 import org.codehaus.plexus.component.annotations.Component;

 import org.codehaus.plexus.component.annotations.Requirement;

 

@@ -92,18 +93,18 @@
     @Override

     // CHECKSTYLE_OFF: LineLength

     public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,

-                                                                                                  ProjectCoordinate root,

+                                                                                                  Model model,

                                                                                                   TransformableFilter dependencyFilter )

     // CHECKSTYLE_ON: LineLength

         throws DependencyResolverException

     {

         // Are there examples where packaging and type are NOT in sync

-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );

+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );

         

         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;

         

         Artifact aetherArtifact =

-            new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );

+            new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension, model.getVersion() );

         

         Dependency aetherRoot = new Dependency( aetherArtifact, null );

         

@@ -113,6 +114,31 @@
                                                      buildingRequest.getRemoteRepositories() );

 

         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );

+        

+        ArtifactTypeRegistry typeRegistry =

+                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

+                                                               ArtifactHandlerManager.class, artifactHandlerManager );

+

+        List<Dependency> aetherDependencies = new ArrayList<Dependency>( model.getDependencies().size() );

+        for ( org.apache.maven.model.Dependency mavenDependency : model.getDependencies() )

+        {

+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+        }

+        request.setDependencies( aetherDependencies );

+

+        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();

+        if ( mavenDependencyManagement != null )

+        {

+            List<Dependency> aetherManagerDependencies =

+                new ArrayList<Dependency>( mavenDependencyManagement.getDependencies().size() );

+            

+            for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencyManagement.getDependencies() )

+            {

+                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+            }

+            

+            request.setManagedDependencies( aetherManagerDependencies );

+        }

 

         return resolveDependencies( buildingRequest, aetherRepositories, dependencyFilter, request );

     }

@@ -251,4 +277,15 @@
 

         return new Dependency( artifact, null );

     }

+    

+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,

+                                            ArtifactTypeRegistry typeRegistry )

+        throws DependencyResolverException

+    {

+        Class<?>[] argClasses = new Class<?>[] { Dependency.class, ArtifactTypeRegistry.class };

+

+        Object[] args = new Object[] { mavenDependency, typeRegistry };

+

+        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );

+    }  

 }

diff --git a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven31DependencyResolver.java b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven31DependencyResolver.java
index e2c528b..0b2ac9a 100644
--- a/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven31DependencyResolver.java
+++ b/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven31DependencyResolver.java
@@ -27,13 +27,14 @@
 import org.apache.maven.RepositoryUtils;

 import org.apache.maven.artifact.handler.ArtifactHandler;

 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;

+import org.apache.maven.model.DependencyManagement;

+import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;

 import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;

 import org.apache.maven.shared.dependencies.DependableCoordinate;

 import org.apache.maven.shared.dependencies.resolve.DependencyResolver;

 import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;

-import org.apache.maven.shared.project.ProjectCoordinate;

 import org.codehaus.plexus.component.annotations.Component;

 import org.codehaus.plexus.component.annotations.Requirement;

 import org.eclipse.aether.RepositorySystem;

@@ -92,18 +93,18 @@
     @Override

     // CHECKSTYLE_OFF: LineLength

     public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,

-                                                                                                  ProjectCoordinate root,

+                                                                                                  Model model,

                                                                                                   TransformableFilter dependencyFilter )

     // CHECKSTYLE_ON: LineLength

         throws DependencyResolverException

     {

      // Are there examples where packaging and type are NOT in sync

-        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );

+        ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );

         

         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;

         

         Artifact aetherArtifact =

-            new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );

+            new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension, model.getVersion() );

         

         Dependency aetherRoot = new Dependency( aetherArtifact, null );

         

@@ -113,6 +114,31 @@
                                                      buildingRequest.getRemoteRepositories() );

 

         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );

+        

+        ArtifactTypeRegistry typeRegistry =

+                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",

+                                                               ArtifactHandlerManager.class, artifactHandlerManager );

+        

+        List<Dependency> aetherDependencies = new ArrayList<Dependency>( model.getDependencies().size() );

+        for ( org.apache.maven.model.Dependency mavenDependency : model.getDependencies() )

+        {

+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+        }

+        request.setDependencies( aetherDependencies );

+

+        DependencyManagement mavenDependencyManagement = model.getDependencyManagement();

+        if ( mavenDependencyManagement != null )

+        {

+            List<Dependency> aetherManagerDependencies =

+                new ArrayList<Dependency>( mavenDependencyManagement.getDependencies().size() );

+            

+            for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencyManagement.getDependencies() )

+            {

+                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );

+            }

+            

+            request.setManagedDependencies( aetherManagerDependencies );

+        }

 

         return resolveDependencies( buildingRequest, aetherRepositories, dependencyFilter, request );

     }

@@ -247,4 +273,14 @@
 

         return new Dependency( artifact, null );

     }

+

+    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )

+                    throws DependencyResolverException

+    {

+        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };

+

+        Object[] args = new Object[] { root, typeRegistry };

+

+        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );

+    }    

 }