WIP use Aether API
diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml
index a974cd4..f380035 100644
--- a/enforcer-rules/pom.xml
+++ b/enforcer-rules/pom.xml
@@ -113,22 +113,6 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven.shared</groupId>
-      <artifactId>maven-dependency-tree</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>org.eclipse.aether</groupId>
-          <artifactId>aether-util</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <!-- needed for ArtifactCollector and maven-dependency-tree 2.2 -->
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-compat</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
       <groupId>org.assertj</groupId>
       <artifactId>assertj-core</artifactId>
       <scope>test</scope>
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
index 4148c6f..a7f9283 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
@@ -1,5 +1,4 @@
 package org.apache.maven.plugins.enforcer;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -19,23 +18,22 @@
  * under the License.
  */
 
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.plugins.enforcer.utils.ArtifactUtils;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.plugins.enforcer.utils.ResolverHelper;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
-import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
-import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-
-import java.util.HashSet;
-import java.util.Set;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.repository.RemoteRepository;
 
 /**
  * Abstract Rule for banning dependencies.
@@ -49,7 +47,7 @@
     /** Specify if transitive dependencies should be searched (default) or only look at direct dependencies. */
     private boolean searchTransitive = true;
 
-    private transient DependencyGraphBuilder graphBuilder;
+    private transient ResolverHelper resolverHelper;
 
     @Override
     public void execute( EnforcerRuleHelper helper )
@@ -58,41 +56,20 @@
         MavenProject project;
         try
         {
-            project = (MavenProject) helper.evaluate( "${project}" );
+            project = (MavenProject) Objects.requireNonNull( helper.evaluate( "${project}" ), "${project} is null" );
         }
         catch ( ExpressionEvaluationException eee )
         {
             throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee );
         }
 
-        MavenSession session;
-        try
-        {
-            session = (MavenSession) helper.evaluate( "${session}" );
-        }
-        catch ( ExpressionEvaluationException eee )
-        {
-            throw new EnforcerRuleException( "Unable to retrieve the reactor MavenProject: ", eee );
-        }
-
-        try
-        {
-            graphBuilder = helper.getComponent( DependencyGraphBuilder.class );
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new EnforcerRuleException( "Unable to lookup DependencyGraphBuilder: ", e );
-        }
-        
-        ProjectBuildingRequest buildingRequest =
-            new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
-        buildingRequest.setProject( project );
+        resolverHelper = new ResolverHelper ( helper );
 
         // get the correct list of dependencies
-        Set<Artifact> dependencies = getDependenciesToCheck( helper, buildingRequest );
+        Map<Artifact, DependencyNode> dependencies = getDependenciesToCheck( helper, project );
 
         // look for banned dependencies
-        Set<Artifact> foundExcludes = checkDependencies( dependencies, helper.getLog() );
+        Set<Artifact> foundExcludes = checkDependencies( dependencies.keySet(), helper.getLog() );
 
         // if any are found, fail the check but list all of them
         if ( foundExcludes != null && !foundExcludes.isEmpty() )
@@ -107,12 +84,37 @@
             for ( Artifact artifact : foundExcludes )
             {
                 buf.append( getErrorMessage( artifact ) );
+                if ( dependencies.get(artifact) != null )
+                {
+                    // emit location information
+                }
+                
             }
+            // TODO: better location message
+            
             message = buf.toString() + "Use 'mvn dependency:tree' to locate the source of the banned dependencies.";
 
             throw new EnforcerRuleException( message );
         }
+    }
 
+    /**
+     * The project's remote repositories to use for the resolution of either plugins or dependencies.
+     * Standard implementation returns the remote repositories for dependencies.
+     * 
+     * @throws EnforcerRuleException 
+     */
+    protected List<RemoteRepository> getRemoteRepositories( EnforcerRuleHelper helper ) throws EnforcerRuleException
+    {
+        try
+        {
+            return (List<RemoteRepository>) Objects.requireNonNull( helper.evaluate( "${project.remoteProjectRepositories}" ),
+                    "${project.remoteProjectRepositories} is null");
+        }
+        catch ( ExpressionEvaluationException eee )
+        {
+            throw new EnforcerRuleException( "Unable to retrieve project's remote repositories", eee );
+        }
     }
 
     protected CharSequence getErrorMessage( Artifact artifact )
@@ -120,43 +122,36 @@
         return "Found Banned Dependency: " + artifact.getId() + System.lineSeparator();
     }
 
-    private Set<Artifact> getDependenciesToCheck( EnforcerRuleHelper helper,
-            ProjectBuildingRequest buildingRequest )
+    private Map<Artifact, DependencyNode> getDependenciesToCheck( EnforcerRuleHelper helper,
+            MavenProject project )
     {
-        String cacheKey = buildingRequest.getProject().getId() + "_" + searchTransitive;
+        String cacheKey = project.getId() + "_" + searchTransitive;
 
         // check in the cache
-        Set<Artifact> dependencies =
-                (Set<Artifact>) helper.getCache( cacheKey, () -> getDependenciesToCheck( buildingRequest ) );
+        Map<Artifact, DependencyNode> dependencies =
+                (Map<Artifact, DependencyNode>) helper.getCache( cacheKey, () -> {
+                    // TODO: first check deprecated method
+                    try {
+                        return resolverHelper.getDependencies( project, searchTransitive );
+                    } catch (DependencyCollectionException e) {
+                        throw new RuntimeException( e );
+                    }
+                    
+                } );
 
         return dependencies;
     }
 
-    protected Set<Artifact> getDependenciesToCheck( ProjectBuildingRequest buildingRequest )
+    /**
+     * Rather use
+     * @param project
+     * @return
+     * @deprecated Use {@link #getDependencyMapToCheck(MavenProject)} instead
+     */
+    @Deprecated
+    protected Set<Artifact> getDependenciesToCheck( ProjectBuildingRequest request )
     {
-        Set<Artifact> dependencies = null;
-        try
-        {
-            DependencyNode node = graphBuilder.buildDependencyGraph( buildingRequest, null );
-            if ( searchTransitive )
-            {
-                dependencies = ArtifactUtils.getAllDescendants( node );
-            }
-            else if ( node.getChildren() != null )
-            {
-                dependencies = new HashSet<>();
-                for ( DependencyNode depNode : node.getChildren() )
-                {
-                    dependencies.add( depNode.getArtifact() );
-                }
-            }
-        }
-        catch ( DependencyGraphBuilderException e )
-        {
-            // otherwise we need to change the signature of this protected method
-            throw new RuntimeException( e );
-        }
-        return dependencies;
+        return null;
     }
 
     /**
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
index e7ef71b..c42617a 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
@@ -28,14 +28,13 @@
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugins.enforcer.utils.ArtifactMatcher;
+import org.apache.maven.plugins.enforcer.utils.ResolverHelper;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
-import org.apache.maven.shared.dependency.graph.DependencyNode;
-import org.apache.maven.shared.dependency.graph.internal.DefaultDependencyGraphBuilder;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
+import org.eclipse.aether.graph.DependencyNode;
 
 /**
  * This rule bans all transitive dependencies. There is a configuration option to exclude certain artifacts from being
@@ -161,13 +160,9 @@
         try
         {
             MavenProject project = (MavenProject) helper.evaluate( "${project}" );
-            MavenSession session = (MavenSession) helper.evaluate( "${session}" );
-            
-            ProjectBuildingRequest buildingRequest =
-                new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
-            buildingRequest.setProject( project );
-            
-            rootNode = createDependencyGraphBuilder().buildDependencyGraph( buildingRequest, null );
+
+            ResolverHelper resolverHelper = new ResolverHelper( helper );
+            rootNode = resolverHelper.collectDependencies( project );
         }
         catch ( Exception e )
         {
@@ -195,18 +190,4 @@
 
     }
 
-    private DependencyGraphBuilder createDependencyGraphBuilder()
-        throws ComponentLookupException
-    {
-        // CHECKSTYLE_OFF: LineLength
-        DefaultDependencyGraphBuilder builder =
-            (DefaultDependencyGraphBuilder) helper.getContainer().lookup( DependencyGraphBuilder.class.getCanonicalName(),
-                                                                          "default" );
-        // CHECKSTYLE_ON: LineLength
-
-        builder.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_DISABLED, "DefaultDependencyGraphBuilder" ) );
-
-        return builder;
-    }
-
 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java
index 9e0a7e8..74d2def 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedPlugins.java
@@ -33,9 +33,9 @@
     extends BannedDependencies

 {

     @Override

-    protected Set<Artifact> getDependenciesToCheck( ProjectBuildingRequest buildingRequest )

+    protected Set<Artifact> getDependenciesToCheck( ProjectBuildingRequest request )

     {

-        return buildingRequest.getProject().getPluginArtifacts();

+        return request.getProject().getPluginArtifacts();

     }

 

     @Override

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
index fdb95e0..eb917b6 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
@@ -24,6 +24,7 @@
 import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.enforcer.rule.api.EnforcerRule;
@@ -32,14 +33,13 @@
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.plugins.enforcer.utils.DependencyVersionMap;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.plugins.enforcer.utils.ResolverHelper;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilder;
-import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderException;
-import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
 
 /**
  * @author <a href="mailto:rex@e-hoffman.org">Rex Hoffman</a>
@@ -74,26 +74,18 @@
         try
         {
             MavenProject project = (MavenProject) helper.evaluate( "${project}" );
-            MavenSession session = (MavenSession) helper.evaluate( "${session}" );
-            DependencyCollectorBuilder dependencyCollectorBuilder =
-                helper.getComponent( DependencyCollectorBuilder.class );
-            ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" );
-
-            ProjectBuildingRequest buildingRequest =
-                new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
-            buildingRequest.setProject( project );
-            buildingRequest.setLocalRepository( repository );
+            ResolverHelper resolverHelper = new ResolverHelper( helper );
             ArtifactFilter filter = ( Artifact a ) -> ( "compile".equalsIgnoreCase( a.getScope () )
                     || "runtime".equalsIgnoreCase( a.getScope () ) )
                     && !a.isOptional();
 
-            return dependencyCollectorBuilder.collectDependencyGraph( buildingRequest, filter );
+            return resolverHelper.collectDependencies( project );
         }
-        catch ( ExpressionEvaluationException | ComponentLookupException e )
+        catch ( ExpressionEvaluationException e )
         {
             throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
         }
-        catch ( DependencyCollectorBuilderException e )
+        catch ( DependencyCollectionException e )
         {
             throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e );
         }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactUtils.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactUtils.java
index b9a04af..234ee3f 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactUtils.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactUtils.java
@@ -1,5 +1,7 @@
 package org.apache.maven.plugins.enforcer.utils;
 
+import java.util.Collection;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -22,13 +24,18 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.plugins.enforcer.utils.ArtifactMatcher.Pattern;
-import org.apache.maven.shared.dependency.graph.DependencyNode;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.graph.DependencyNode;
 
 /**
  * 
@@ -126,4 +133,9 @@
         return result;
     }
 
+    public static List<org.eclipse.aether.graph.Dependency> toDependencies( List<Dependency> dependencies,
+            ArtifactTypeRegistry types )
+    {
+        return dependencies.stream().map( d-> RepositoryUtils.toDependency( d, types )).collect( Collectors.toList() );
+    }
 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ConflictingDependencyVersionCollector.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ConflictingDependencyVersionCollector.java
new file mode 100644
index 0000000..e7376ee
--- /dev/null
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ConflictingDependencyVersionCollector.java
@@ -0,0 +1,49 @@
+package org.apache.maven.plugins.enforcer.utils;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+
+public class ConflictingDependencyVersionCollector implements DependencyVisitor {
+
+    private final Map<Key, List<DependencyNode>> keysToNodes;
+
+    ConflictingDependencyVersionCollector() {
+        keysToNodes = new HashMap<>();
+    }
+    private static final class Key
+    {
+        private final String artifactId;
+        private final String groupId;
+
+        public Key(Artifact artifact) {
+            this(artifact.getArtifactId(), artifact.getGroupId());
+        }
+        public Key(String artifactId, String groupId) {
+            super();
+            this.artifactId = artifactId;
+            this.groupId = groupId;
+        }
+    }
+    
+    @Override
+    public boolean visitEnter( DependencyNode node )
+    {
+        Key key = new Key(node.getArtifact());
+        keysToNodes.merge(key, new LinkedList<DependencyNode>(node), nodes -> nodes.add( node ));
+        return false;
+    }
+
+    @Override
+    public boolean visitLeave( DependencyNode node )
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+}
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
index fa65546..8938386 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
@@ -33,6 +33,7 @@
  * @author Brian Fox
  *
  */
+@Deprecated
 public class DependencyVersionMap
     implements DependencyNodeVisitor
 {
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ResolverHelper.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ResolverHelper.java
new file mode 100644
index 0000000..3281035
--- /dev/null
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ResolverHelper.java
@@ -0,0 +1,117 @@
+package org.apache.maven.plugins.enforcer.utils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.repository.RemoteRepository;
+
+public class ResolverHelper {
+    
+    private final RepositorySystem repoSystem;
+    private final RepositorySystemSession repoSession;
+    private final List<RemoteRepository> remoteRepositories;
+    private final List<RemoteRepository> remotePluginRepositories;
+    
+    public ResolverHelper( EnforcerRuleHelper helper ) throws EnforcerRuleException
+    {
+        try
+        {
+            repoSession =
+                (RepositorySystemSession) Objects.requireNonNull( helper.evaluate( "${repositorySystemSession}" ),
+                                                                  "${repositorySystemSession} is null" );
+        }
+        catch ( ExpressionEvaluationException eee )
+        {
+            throw new EnforcerRuleException( "Unable to retrieve repositorySystemSession", eee );
+        }
+        remoteRepositories = getRemoteRepositories( helper );
+        remotePluginRepositories = getRemotePluginRepositories( helper );
+        try 
+        {
+            repoSystem = helper.getComponent( RepositorySystem.class );
+        }
+        catch ( ComponentLookupException cle )
+        {
+            throw new EnforcerRuleException( "Unable to lookup component RepositorySystem", cle );
+        }
+    }
+
+    /**
+     * The project's remote repositories to use for the resolution of dependencies.
+     * 
+     * @throws EnforcerRuleException 
+     */
+    private List<RemoteRepository> getRemoteRepositories( EnforcerRuleHelper helper ) throws EnforcerRuleException
+    {
+        try
+        {
+            return (List<RemoteRepository>) Objects.requireNonNull( helper.evaluate( "${project.remoteProjectRepositories}" ),
+                    "${project.remoteProjectRepositories} is null");
+        }
+        catch ( ExpressionEvaluationException eee )
+        {
+            throw new EnforcerRuleException( "Unable to retrieve project's remote repositories", eee );
+        }
+    }
+
+    /**
+     * The project's remote repositories to use for the resolution of plugins.
+     * @throws EnforcerRuleException 
+     */
+    private List<RemoteRepository> getRemotePluginRepositories( EnforcerRuleHelper helper ) throws EnforcerRuleException
+    {
+        try
+        {
+            return (List<RemoteRepository>) Objects.requireNonNull( helper.evaluate( "${project.remotePluginRepositories}" ),
+                    "${project.remotePluginRepositories} is null");
+        }
+        catch ( ExpressionEvaluationException eee )
+        {
+            throw new EnforcerRuleException( "Unable to retrieve project's remote plugin repositories", eee );
+        }
+    }
+
+    public Map<Artifact, DependencyNode> getDependencies( MavenProject project, boolean searchTransitive ) throws DependencyCollectionException
+    {
+        Map<Artifact, DependencyNode> dependencies = null;
+        DependencyNode node = collectDependencies(project);
+        if ( searchTransitive )
+        {
+            // TODO:!
+            dependencies = null; // ArtifactUtils.getAllDescendants( node );
+        }
+        else if ( node.getChildren() != null )
+        {
+            dependencies = new HashMap<>();
+            for ( DependencyNode depNode : node.getChildren() )
+            {
+                dependencies.putIfAbsent( RepositoryUtils.toArtifact( depNode.getArtifact() ), depNode );
+            }
+        }
+        return dependencies;
+    }
+
+    public DependencyNode collectDependencies(MavenProject project) throws DependencyCollectionException {
+        List<org.eclipse.aether.graph.Dependency> resolverDeps = ArtifactUtils.toDependencies( project.getDependencies(), repoSession.getArtifactTypeRegistry() );
+        List<org.eclipse.aether.graph.Dependency> resolvedManagedDeps = ArtifactUtils.toDependencies( project.getDependencyManagement().getDependencies(), repoSession.getArtifactTypeRegistry() );
+        CollectRequest collectRequest = new CollectRequest( resolverDeps, resolvedManagedDeps, remoteRepositories );
+        CollectResult collectResult = repoSystem.collectDependencies( repoSession, collectRequest );
+        DependencyNode node = collectResult.getRoot();
+        return node;
+    }
+}
diff --git a/pom.xml b/pom.xml
index 4f06e61..b5f6c9e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -171,11 +171,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.maven.shared</groupId>
-        <artifactId>maven-dependency-tree</artifactId>
-        <version>3.1.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.maven.shared</groupId>
         <artifactId>maven-shared-utils</artifactId>
         <version>3.3.4</version>
       </dependency>