Refactor code to improve separation of Maven APIs and Aether code. All transfer internal Maven3x implementations should not use (close to) any Maven Core code, only a few classes are allowed.
diff --git a/pom.xml b/pom.xml
index 8511433..0b26abd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,6 +53,10 @@
       <url>scm:svn:https://svn.apache.org/repos/asf/maven/website/components/${maven.site.path}</url>
     </site>
   </distributionManagement>
+  
+  <properties>
+    <javaVersion>7</javaVersion>
+  </properties>
 
   <build>
     <plugins>
@@ -83,7 +87,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <version>1.15</version>
+        <version>1.18</version>
         <executions>
           <execution>
             <id>sniff</id>
@@ -94,10 +98,13 @@
           </execution>
         </executions>
         <configuration>
+          <ignores>
+            <ignore>java.lang.invoke.MethodHandle</ignore>
+          </ignores>
           <signature>
             <groupId>org.codehaus.mojo.signature</groupId>
-            <artifactId>java16</artifactId>
-            <version>1.1</version>
+            <artifactId>java17</artifactId>
+            <version>1.0</version>
           </signature>
         </configuration>
       </plugin>
@@ -110,7 +117,7 @@
             <configuration>
               <rules>
                 <enforceBytecodeVersion>
-                  <maxJdkVersion>1.6</maxJdkVersion>
+                  <maxJdkVersion>1.${javaVersion}</maxJdkVersion>
                 </enforceBytecodeVersion>
               </rules>
             </configuration>
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
index 345e85d..c6f2858 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
@@ -52,11 +52,7 @@
 
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint );
-
-            effectiveArtifactDeployer.deploy( request, mavenArtifacts );
+            getMavenArtifactDeployer( request ).deploy( mavenArtifacts );
         }
         catch ( ComponentLookupException e )
         {
@@ -72,11 +68,7 @@
         validateParameters( request, mavenArtifacts );
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint );
-
-            effectiveArtifactDeployer.deploy( request, remoteRepository, mavenArtifacts );
+            getMavenArtifactDeployer( request ).deploy( remoteRepository, mavenArtifacts );
         }
         catch ( ComponentLookupException e )
         {
@@ -133,4 +125,29 @@
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
+    
+    private MavenArtifactDeployer getMavenArtifactDeployer( ProjectBuildingRequest buildingRequest )
+        throws ComponentLookupException, ArtifactDeployerException
+    {
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem repositorySystem =
+                            container.lookup( org.eclipse.aether.RepositorySystem.class );
+            
+            org.eclipse.aether.RepositorySystemSession session =
+                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            
+            return new Maven31ArtifactDeployer( repositorySystem, session );
+        }
+        else
+        {
+            org.sonatype.aether.RepositorySystem repositorySystem =
+                            container.lookup( org.sonatype.aether.RepositorySystem.class );
+            
+            org.sonatype.aether.RepositorySystemSession session =
+                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            
+            return new Maven30ArtifactDeployer( repositorySystem, session );
+        }
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
index 83cc6a2..0f5908d 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
@@ -25,13 +25,9 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
 import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -43,33 +39,35 @@
 /**
  * 
  */
-@Component( role = ArtifactDeployer.class, hint = "maven3" )
 class Maven30ArtifactDeployer
-    implements ArtifactDeployer
+    implements MavenArtifactDeployer
 {
 
-    @Requirement
-    private RepositorySystem repositorySystem;
-
-    @Override
-    public void deploy( ProjectBuildingRequest buildingRequest,
-                        Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                            throws ArtifactDeployerException
+    private final RepositorySystem repositorySystem;
+    
+    private final RepositorySystemSession session;
+    
+    Maven30ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
     {
-        deploy( buildingRequest, null, mavenArtifacts );
+        this.repositorySystem = repositorySystem;
+        this.session = session;
     }
 
     @Override
-    public void deploy( ProjectBuildingRequest buildingRequest, ArtifactRepository remoteRepository,
+    public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+                            throws ArtifactDeployerException
+    {
+        deploy( null, mavenArtifacts );
+    }
+
+    @Override
+    public void deploy( ArtifactRepository remoteRepository,
                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
                             throws ArtifactDeployerException
     {
         // prepare request
         DeployRequest request = new DeployRequest();
 
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
         RemoteRepository defaultRepository = null;
 
         if ( remoteRepository != null )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
index 71594de..1a2b640 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
@@ -25,13 +25,9 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
 import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
@@ -43,33 +39,36 @@
 /**
  * 
  */
-@Component( role = ArtifactDeployer.class, hint = "maven31" )
 class Maven31ArtifactDeployer
-    implements ArtifactDeployer
+    implements MavenArtifactDeployer
 {
 
-    @Requirement
-    private RepositorySystem repositorySystem;
-
-    @Override
-    public void deploy( ProjectBuildingRequest buildingRequest,
-                        Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                            throws ArtifactDeployerException
+    private final RepositorySystem repositorySystem;
+    
+    private final RepositorySystemSession session;
+    
+    Maven31ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
     {
-        deploy( buildingRequest, null, mavenArtifacts );
+        super();
+        this.repositorySystem = repositorySystem;
+        this.session = session;
     }
 
-    /** {@inheritDoc} */
-    public void deploy( ProjectBuildingRequest buildingRequest, ArtifactRepository remoteRepository,
+    @Override
+    public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+                            throws ArtifactDeployerException
+    {
+        deploy( null, mavenArtifacts );
+    }
+
+    @Override
+    public void deploy( ArtifactRepository remoteRepository,
                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
                             throws ArtifactDeployerException
     {
         // prepare request
         DeployRequest request = new DeployRequest();
 
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
         RemoteRepository defaultRepository = null;
 
         if ( remoteRepository != null )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
new file mode 100644
index 0000000..c4f0446
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
@@ -0,0 +1,42 @@
+package org.apache.maven.shared.transfer.artifact.deploy.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface MavenArtifactDeployer
+{
+
+    void deploy( Collection<Artifact> mavenArtifacts )
+        throws ArtifactDeployerException;
+
+    void deploy( ArtifactRepository remoteRepository, Collection<Artifact> mavenArtifacts )
+        throws ArtifactDeployerException;
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
index 574d208..f8a56f7 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
@@ -26,6 +26,7 @@
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+import org.apache.maven.shared.transfer.repository.RepositoryManager;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
@@ -41,8 +42,9 @@
 class DefaultArtifactInstaller
     implements ArtifactInstaller, Contextualizable
 {
-
     private PlexusContainer container;
+    
+    private RepositoryManager repositoryManager;
 
     @Override
     public void install( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
@@ -51,11 +53,7 @@
         validateParameters( request, mavenArtifacts );
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            ArtifactInstaller effectiveArtifactInstaller = container.lookup( ArtifactInstaller.class, hint );
-
-            effectiveArtifactInstaller.install( request, mavenArtifacts );
+            getMavenArtifactInstaller( request ).install( mavenArtifacts );
         }
         catch ( ComponentLookupException e )
         {
@@ -78,14 +76,13 @@
         }
 
         // TODO: Should we check for exists() ?
+        
+        // update local repo in request 
+        ProjectBuildingRequest newRequest = repositoryManager.setLocalRepositoryBasedir( request, localRepositry );
 
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            ArtifactInstaller effectiveArtifactInstaller = container.lookup( ArtifactInstaller.class, hint );
-
-            effectiveArtifactInstaller.install( request, localRepositry, mavenArtifacts );
+            getMavenArtifactInstaller( newRequest ).install( mavenArtifacts );
         }
         catch ( ComponentLookupException e )
         {
@@ -142,4 +139,29 @@
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
+    
+    private MavenArtifactInstaller getMavenArtifactInstaller( ProjectBuildingRequest buildingRequest )
+        throws ComponentLookupException, ArtifactInstallerException
+    {
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem repositorySystem =
+                            container.lookup( org.eclipse.aether.RepositorySystem.class );
+            
+            org.eclipse.aether.RepositorySystemSession session =
+                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+
+            return new Maven31ArtifactInstaller( repositorySystem, session );
+        }
+        else
+        {
+            org.sonatype.aether.RepositorySystem repositorySystem =
+                            container.lookup( org.sonatype.aether.RepositorySystem.class );
+            
+            org.sonatype.aether.RepositorySystemSession session =
+                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+
+            return new Maven30ArtifactInstaller( repositorySystem, session );
+        }
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
index 260beec..2a15dfd 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
@@ -19,20 +19,14 @@
  * under the License.
  */
 
-import java.io.File;
 import java.util.Collection;
 
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
 import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -43,30 +37,24 @@
 /**
  * 
  */
-@Component( role = ArtifactInstaller.class, hint = "maven3" )
 class Maven30ArtifactInstaller
-    implements ArtifactInstaller
+    implements MavenArtifactInstaller
 {
-    @Requirement
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
     
-    @Requirement
-    private RepositoryManager repositoryManager; 
+    private final RepositorySystemSession session; 
+    
+    Maven30ArtifactInstaller( RepositorySystem repositorySystem, RepositorySystemSession session )
+    {
+        this.repositorySystem = repositorySystem;
+        this.session = session;
+    }
 
     @Override
-    public void install( ProjectBuildingRequest buildingRequest,
-                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                             throws ArtifactInstallerException
+    public void install( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+        throws ArtifactInstallerException
     {
-        install( buildingRequest, null, mavenArtifacts );
-    }
-    
-    @Override
-    public void install( ProjectBuildingRequest buildingRequest, File localRepository,
-                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                             throws ArtifactInstallerException
-    {
-     // prepare installRequest
+        // prepare installRequest
         InstallRequest request = new InstallRequest();
 
         // transform artifacts
@@ -100,14 +88,10 @@
             }
         }
 
-        if ( localRepository != null )
-        {
-            buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository );
-        }
-
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
+//        if ( localRepository != null )
+//        {
+//            buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository );
+//        }
         
         // install
         try
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
index d922b97..e4eae74 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
@@ -19,20 +19,14 @@
  * under the License.
  */
 
-import java.io.File;
 import java.util.Collection;
 
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
 import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
@@ -43,27 +37,22 @@
 /**
  * 
  */
-@Component( role = ArtifactInstaller.class, hint = "maven31" )
 class Maven31ArtifactInstaller
-    implements ArtifactInstaller
+    implements MavenArtifactInstaller
 {
-    @Requirement
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
 
-    @Requirement
-    private RepositoryManager repositoryManager;
-
-    @Override
-    public void install( ProjectBuildingRequest buildingRequest,
-                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                             throws ArtifactInstallerException
-    {
-        install( buildingRequest, null, mavenArtifacts );
-    }
+    private final RepositorySystemSession session;
     
+    Maven31ArtifactInstaller( RepositorySystem repositorySystem,
+                                     RepositorySystemSession session )
+    {
+        this.repositorySystem = repositorySystem;
+        this.session = session;
+    }
+
     @Override
-    public void install( ProjectBuildingRequest buildingRequest, File localRepository,
-                         Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
+    public void install( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
                              throws ArtifactInstallerException
     {
         // prepare installRequest
@@ -100,14 +89,6 @@
             }
         }
         
-        if ( localRepository != null )
-        {
-            buildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, localRepository );
-        }
-
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
         // install
         try
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
new file mode 100644
index 0000000..7670d57
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
@@ -0,0 +1,36 @@
+package org.apache.maven.shared.transfer.artifact.install.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface MavenArtifactInstaller
+{
+    void install( Collection<Artifact> mavenArtifacts )
+        throws ArtifactInstallerException;
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
index ae709a5..9f1826b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
@@ -19,6 +19,9 @@
  * under the License.
  */
 
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
@@ -33,6 +36,7 @@
 import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
+
 /**
  * 
  */
@@ -49,11 +53,7 @@
         validateParameters( buildingRequest, mavenArtifact );
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint );
-
-            return effectiveArtifactResolver.resolveArtifact( buildingRequest, mavenArtifact );
+            return getMavenArtifactResolver( buildingRequest ).resolveArtifact( mavenArtifact );
         }
         catch ( ComponentLookupException e )
         {
@@ -68,11 +68,7 @@
         validateParameters( buildingRequest, coordinate );
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint );
-
-            return effectiveArtifactResolver.resolveArtifact( buildingRequest, coordinate );
+            return getMavenArtifactResolver( buildingRequest ).resolveArtifact( coordinate );
         }
         catch ( ComponentLookupException e )
         {
@@ -137,4 +133,44 @@
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
+    
+    private MavenArtifactResolver getMavenArtifactResolver( ProjectBuildingRequest buildingRequest )
+        throws ComponentLookupException, ArtifactResolverException
+    {
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem repositorySystem =
+                            container.lookup( org.eclipse.aether.RepositorySystem.class );
+            
+            @SuppressWarnings( "unchecked" )
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =
+                (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",
+                                                                           List.class,
+                                                                           buildingRequest.getRemoteRepositories() );
+
+            org.eclipse.aether.RepositorySystemSession session =
+                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            
+            return new Maven31ArtifactResolver( repositorySystem, aetherRepositories, session );
+            
+        }
+        else
+        {
+            org.sonatype.aether.RepositorySystem repositorySystem =
+                            container.lookup( org.sonatype.aether.RepositorySystem.class );
+            
+            @SuppressWarnings( "unchecked" )
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =
+                (List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,
+                                                                            "toRepos", List.class,
+                                                                            buildingRequest.getRemoteRepositories() );
+
+            org.sonatype.aether.RepositorySystemSession session =
+                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            
+            return new Maven30ArtifactResolver( repositorySystem, aetherRepositories, session );
+        }
+
+
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
index f81b243..e5f820c 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
@@ -22,13 +22,8 @@
 import java.util.List;
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -43,33 +38,38 @@
 /**
  * 
  */
-@Component( role = ArtifactResolver.class, hint = "maven3" )
 class Maven30ArtifactResolver
-    implements ArtifactResolver
+    implements MavenArtifactResolver
 {
-    @Requirement
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
 
-    @Requirement
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final List<RemoteRepository> aetherRepositories;
+    
+    private final RepositorySystemSession session;
+
+    Maven30ArtifactResolver( RepositorySystem repositorySystem, List<RemoteRepository> aetherRepositories,
+                                    RepositorySystemSession session )
+    {
+        this.repositorySystem = repositorySystem;
+        this.aetherRepositories = aetherRepositories;
+        this.session = session;
+    }
 
     @Override
     // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
-                                                                                    org.apache.maven.artifact.Artifact mavenArtifact )
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
                                                                                         throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
         Artifact aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                              org.apache.maven.artifact.Artifact.class, mavenArtifact );
 
-        return resolveArtifact( buildingRequest, aetherArtifact );
+        return resolveArtifact( aetherArtifact );
     }
 
     @Override
     // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
-                                                                                    ArtifactCoordinate coordinate )
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate )
                                                                                         throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
@@ -77,23 +77,14 @@
             new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
                                  coordinate.getExtension(), coordinate.getVersion() );
 
-        return resolveArtifact( buildingRequest, aetherArtifact );
+        return resolveArtifact( aetherArtifact );
     }
 
     // CHECKSTYLE_OFF: LineLength
-    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
-                                                                                     Artifact aetherArtifact )
+    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact )
                                                                                          throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
-        @SuppressWarnings( "unchecked" )
-        List<RemoteRepository> aetherRepositories =
-            (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
-                                                     buildingRequest.getRemoteRepositories() );
-
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
         try
         {
             // use descriptor to respect relocation
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
index 56e4519..888a683 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
@@ -22,13 +22,8 @@
 import java.util.List;
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
@@ -43,33 +38,38 @@
 /**
  * 
  */
-@Component( role = ArtifactResolver.class, hint = "maven31" )
 class Maven31ArtifactResolver
-    implements ArtifactResolver
+    implements MavenArtifactResolver
 {
-    @Requirement
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
+    
+    private final List<RemoteRepository> aetherRepositories;
+    
+    private final RepositorySystemSession session;
 
-    @Requirement
-    private ArtifactHandlerManager artifactHandlerManager;
+    Maven31ArtifactResolver( RepositorySystem repositorySystem, List<RemoteRepository> aetherRepositories,
+                                    RepositorySystemSession session )
+    {
+        this.repositorySystem = repositorySystem;
+        this.aetherRepositories = aetherRepositories;
+        this.session = session;
+    }
 
     @Override
     // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
-                                                                                    org.apache.maven.artifact.Artifact mavenArtifact )
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
                                                                                         throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
         Artifact aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                              org.apache.maven.artifact.Artifact.class, mavenArtifact );
 
-        return resolveArtifact( buildingRequest, aetherArtifact );
+        return resolveArtifact( aetherArtifact );
     }
 
     @Override
     // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
-                                                                                    ArtifactCoordinate coordinate )
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ArtifactCoordinate coordinate )
                                                                                         throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
@@ -77,23 +77,14 @@
             new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(),
                                  coordinate.getExtension(), coordinate.getVersion() );
 
-        return resolveArtifact( buildingRequest, aetherArtifact );
+        return resolveArtifact( aetherArtifact );
     }
 
     // CHECKSTYLE_OFF: LineLength
-    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
-                                                                                     Artifact aetherArtifact )
+    private org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( Artifact aetherArtifact )
                                                                                          throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
-        @SuppressWarnings( "unchecked" )
-        List<RemoteRepository> aetherRepositories =
-            (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
-                                                     buildingRequest.getRemoteRepositories() );
-
-        RepositorySystemSession session =
-            (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
         try
         {
             // use descriptor to respect relocation
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
new file mode 100644
index 0000000..2e9fb74
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
@@ -0,0 +1,38 @@
+package org.apache.maven.shared.transfer.artifact.resolve.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface MavenArtifactResolver
+{
+    ArtifactResult resolveArtifact( Artifact mavenArtifact ) throws ArtifactResolverException;
+
+    ArtifactResult resolveArtifact( ArtifactCoordinate coordinate ) throws ArtifactResolverException;
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
index 863c326..9904731 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
@@ -19,6 +19,10 @@
  * under the License.

  */

 

+import java.util.List;

+

+import org.apache.maven.RepositoryUtils;

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

 import org.apache.maven.model.Dependency;

 import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

@@ -72,11 +76,7 @@
 

         try

         {

-            String hint = isMaven31() ? "maven31" : "maven3";

-

-            DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );

-

-            return effectiveDependencyCollector.collectDependencies( buildingRequest, root );

+            return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );

         }

         catch ( ComponentLookupException e )

         {

@@ -172,5 +172,49 @@
     {

         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );

     }

+    

+    private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )

+        throws ComponentLookupException, DependencyCollectorException

+    {

+        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );

+        

+        if ( isMaven31() )

+        {

+            org.eclipse.aether.RepositorySystem m31RepositorySystem =

+                container.lookup( org.eclipse.aether.RepositorySystem.class );

+

+            org.eclipse.aether.RepositorySystemSession session =

+                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );

+

+            @SuppressWarnings( "unchecked" )

+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =

+                (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",

+                                                                           List.class,

+                                                                           buildingRequest.getRemoteRepositories() );

+

+            return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,

+                                                   aetherRepositories );

+            

+        }

+        else

+        {

+

+            org.sonatype.aether.RepositorySystem m30RepositorySystem =

+                            container.lookup( org.sonatype.aether.RepositorySystem.class );

+

+            org.sonatype.aether.RepositorySystemSession session =

+                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );

+

+            @SuppressWarnings( "unchecked" )

+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =

+                (List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,

+                                                                            "toRepos", List.class,

+                                                                            buildingRequest.getRemoteRepositories() );

+

+            return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,

+                                                   aetherRepositories );

+        }

+

+    }

 

 }

diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
index a1abb8c..4b4eaf2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
@@ -26,13 +26,11 @@
 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.transfer.dependencies.DependableCoordinate;

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

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

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

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

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

 import org.sonatype.aether.RepositorySystem;

 import org.sonatype.aether.RepositorySystemSession;

 import org.sonatype.aether.artifact.Artifact;

@@ -49,19 +47,29 @@
  * @author Robert Scholte

  *

  */

-@Component( role = DependencyCollector.class, hint = "maven3" )

 class Maven30DependencyCollector

-    implements DependencyCollector

+    implements MavenDependencyCollector

 {

-    @Requirement

-    private RepositorySystem repositorySystem;

+    private final RepositorySystem repositorySystem;

 

-    @Requirement

-    private ArtifactHandlerManager artifactHandlerManager;

+    private final ArtifactHandlerManager artifactHandlerManager;

+

+    private final RepositorySystemSession session;

+    

+    private final List<RemoteRepository> aetherRepositories;

+    

+    Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,

+                                RepositorySystemSession session, List<RemoteRepository> aetherRepositories )

+    {

+        super();

+        this.repositorySystem = repositorySystem;

+        this.artifactHandlerManager = artifactHandlerManager;

+        this.session = session;

+        this.aetherRepositories = aetherRepositories;

+    }

 

     @Override

-    public CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest,

-                                                org.apache.maven.model.Dependency root )

+    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )

         throws DependencyCollectorException

     {

         ArtifactTypeRegistry typeRegistry =

@@ -71,11 +79,11 @@
         CollectRequest request = new CollectRequest();

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

 

-        return collectDependencies( buildingRequest, request );

+        return collectDependencies( request );

     }

 

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )

+    public CollectorResult collectDependencies( DependableCoordinate root )

         throws DependencyCollectorException

     {

         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );

@@ -88,11 +96,11 @@
         CollectRequest request = new CollectRequest();

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

 

-        return collectDependencies( buildingRequest, request );

+        return collectDependencies( request );

     }

     

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )

+    public CollectorResult collectDependencies( Model root )

         throws DependencyCollectorException

     {

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

@@ -130,19 +138,12 @@
             request.setManagedDependencies( aetherManagerDependencies );

         }

         

-        return collectDependencies( buildingRequest, request );

+        return collectDependencies( request );

     }

 

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

+    private CollectorResult collectDependencies( CollectRequest request )

         throws DependencyCollectorException

     {

-        RepositorySystemSession session =

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

-

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

         request.setRepositories( aetherRepositories );

 

         try

diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
index cc4430d..0ee0385 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
@@ -26,13 +26,10 @@
 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.transfer.dependencies.DependableCoordinate;

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

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

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

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

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

 import org.eclipse.aether.RepositorySystem;

 import org.eclipse.aether.RepositorySystemSession;

 import org.eclipse.aether.artifact.Artifact;

@@ -49,19 +46,29 @@
  * @author Robert Scholte

  *

  */

-@Component( role = DependencyCollector.class, hint = "maven31" )

 class Maven31DependencyCollector

-    implements DependencyCollector

+    implements MavenDependencyCollector

 {

-    @Requirement

-    private RepositorySystem repositorySystem;

+    private final RepositorySystem repositorySystem;

 

-    @Requirement

-    private ArtifactHandlerManager artifactHandlerManager;

+    private final ArtifactHandlerManager artifactHandlerManager;

+    

+    private final RepositorySystemSession session;

+    

+    private final List<RemoteRepository> aetherRepositories;

+    

+    Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,

+                                RepositorySystemSession session, List<RemoteRepository> aetherRepositories )

+    {

+        super();

+        this.repositorySystem = repositorySystem;

+        this.artifactHandlerManager = artifactHandlerManager;

+        this.session = session;

+        this.aetherRepositories = aetherRepositories;

+    }

 

     @Override

-    public CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest,

-                                                org.apache.maven.model.Dependency root )

+    public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )

         throws DependencyCollectorException

     {

         ArtifactTypeRegistry typeRegistry =

@@ -71,11 +78,11 @@
         CollectRequest request = new CollectRequest();

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

 

-        return collectDependencies( buildingRequest, request );

+        return collectDependencies( request );

     }

 

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )

+    public CollectorResult collectDependencies( DependableCoordinate root )

         throws DependencyCollectorException

     {

         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );

@@ -88,11 +95,11 @@
         CollectRequest request = new CollectRequest();

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

 

-        return collectDependencies( buildingRequest, request );

+        return collectDependencies( request );

     }

     

     @Override

-    public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )

+    public CollectorResult collectDependencies( Model root )

         throws DependencyCollectorException

     {

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

@@ -130,19 +137,12 @@
             request.setManagedDependencies( aetherManagerDependencies );

         }

 

-        return collectDependencies( buildingRequest, request );

+        return collectDependencies( request );

     }

 

-    private CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, CollectRequest request )

+    private CollectorResult collectDependencies( CollectRequest request )

         throws DependencyCollectorException

     {

-        RepositorySystemSession session =

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

-

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

         request.setRepositories( aetherRepositories );

 

         try

diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
new file mode 100644
index 0000000..53823f8
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
@@ -0,0 +1,44 @@
+package org.apache.maven.shared.transfer.dependencies.collect.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
+
+/**
+ * 
+ * @author Robert Scholte
+ */
+public interface MavenDependencyCollector
+{
+
+    CollectorResult collectDependencies( Dependency root )
+        throws DependencyCollectorException;
+
+    CollectorResult collectDependencies( DependableCoordinate root )
+        throws DependencyCollectorException;
+
+    CollectorResult collectDependencies( Model root )
+        throws DependencyCollectorException;
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
index 2c1d7ea..f3a6866 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
@@ -20,7 +20,10 @@
  */

 

 import java.util.Collection;

+import java.util.List;

 

+import org.apache.maven.RepositoryUtils;

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

 import org.apache.maven.model.Dependency;

 import org.apache.maven.model.Model;

 import org.apache.maven.project.ProjectBuildingRequest;

@@ -57,12 +60,8 @@
         

         try

         {

-            String hint = isMaven31() ? "maven31" : "maven3";

-

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

-

-            return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinates, managedDependencies,

-                                                                  filter );

+            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,

+                                                                                      filter );

         }

         catch ( ComponentLookupException e )

         {

@@ -78,11 +77,7 @@
         validateParameters( buildingRequest, coordinate, filter );

         try

         {

-            String hint = isMaven31() ? "maven31" : "maven3";

-

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

-

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

+            return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter );

         }

         catch ( ComponentLookupException e )

         {

@@ -98,11 +93,7 @@
         validateParameters( buildingRequest, model, filter );

         try

         {

-            String hint = isMaven31() ? "maven31" : "maven3";

-

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

-

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

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

         }

         catch ( ComponentLookupException e )

         {

@@ -164,6 +155,48 @@
         }

 

     }

+    

+    private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )

+        throws ComponentLookupException, DependencyResolverException

+    {

+        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );

+        

+        if ( isMaven31() )

+        {

+            org.eclipse.aether.RepositorySystem m31RepositorySystem =

+                container.lookup( org.eclipse.aether.RepositorySystem.class );

+

+            org.eclipse.aether.RepositorySystemSession session =

+                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );

+

+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =

+                (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 

+                                                                           "toRepos",

+                                                                           List.class,

+                                                                           buildingRequest.getRemoteRepositories() );

+

+            return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,

+                                                  aetherRepositories );

+        }

+        else

+        {

+            org.sonatype.aether.RepositorySystem m30RepositorySystem =

+                container.lookup( org.sonatype.aether.RepositorySystem.class );

+

+            org.sonatype.aether.RepositorySystemSession session =

+                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );

+

+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =

+                (List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,

+                                                                            "toRepos", 

+                                                                            List.class,

+                                                                            buildingRequest.getRemoteRepositories() );

+

+            return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session,

+                                                  aetherRepositories );

+

+        }

+    }

 

     private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )

     {

diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
index 9182330..806d415 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
@@ -29,14 +29,10 @@
 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.transfer.dependencies.DependableCoordinate;

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

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

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

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

 

 import org.sonatype.aether.RepositorySystem;

 import org.sonatype.aether.RepositorySystemSession;

@@ -56,20 +52,30 @@
 /**

  * 

  */

-@Component( role = DependencyResolver.class, hint = "maven3" )

 class Maven30DependencyResolver

-    implements DependencyResolver

+    implements MavenDependencyResolver

 {

-    @Requirement

-    private RepositorySystem repositorySystem;

+    private final RepositorySystem repositorySystem;

 

-    @Requirement

-    private ArtifactHandlerManager artifactHandlerManager;

+    private final ArtifactHandlerManager artifactHandlerManager;

+    

+    private final RepositorySystemSession session;

+    

+    private final List<RemoteRepository> aetherRepositories;

+    

+    Maven30DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,

+                                      RepositorySystemSession session, List<RemoteRepository> aetherRepositories )

+    {

+        super();

+        this.repositorySystem = repositorySystem;

+        this.artifactHandlerManager = artifactHandlerManager;

+        this.session = session;

+        this.aetherRepositories = aetherRepositories;

+    }

 

     @Override

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                  DependableCoordinate coordinate,

+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( DependableCoordinate coordinate,

                                                                                                   TransformableFilter dependencyFilter )

     // CHECKSTYLE_ON: LineLength

         throws DependencyResolverException

@@ -80,20 +86,14 @@
 

         Dependency aetherRoot = toDependency( coordinate, typeRegistry );

 

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

-

         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );

 

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

+        return resolveDependencies( aetherRepositories, dependencyFilter, request );

     }

     

     @Override

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                  Model model,

+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,

                                                                                                   TransformableFilter dependencyFilter )

     // CHECKSTYLE_ON: LineLength

         throws DependencyResolverException

@@ -108,11 +108,6 @@
         

         Dependency aetherRoot = new Dependency( aetherArtifact, null );

         

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

-

         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );

         

         ArtifactTypeRegistry typeRegistry =

@@ -140,13 +135,12 @@
             request.setManagedDependencies( aetherManagerDependencies );

         }

 

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

+        return resolveDependencies( aetherRepositories, dependencyFilter, request );

     }

 

     @Override

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                  Collection<org.apache.maven.model.Dependency> mavenDependencies,

+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies,

                                                                                                   Collection<org.apache.maven.model.Dependency> managedMavenDependencies,

                                                                                                   TransformableFilter filter )

     // CHECKSTYLE_ON: LineLength

@@ -193,20 +187,14 @@
             }

         }

 

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

-

         CollectRequest request =

             new CollectRequest( aetherDependencies, aetherManagedDependencies, aetherRepositories );

 

-        return resolveDependencies( buildingRequest, aetherRepositories, filter, request );

+        return resolveDependencies( aetherRepositories, filter, request );

     }

 

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                   List<RemoteRepository> aetherRepositories,

+    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( List<RemoteRepository> aetherRepositories,

                                                                                                    TransformableFilter dependencyFilter,

                                                                                                    CollectRequest request )

                                                                                                        throws DependencyResolverException

@@ -220,9 +208,6 @@
                 depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() );

             }

 

-            RepositorySystemSession session =

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

-

             final List<ArtifactResult> dependencyResults =

                 repositorySystem.resolveDependencies( session, request, depFilter );

 

diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
index c4f53cf..7bbd6fc 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
@@ -29,14 +29,10 @@
 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.transfer.dependencies.DependableCoordinate;

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

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

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

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

 import org.eclipse.aether.RepositorySystem;

 import org.eclipse.aether.RepositorySystemSession;

 import org.eclipse.aether.artifact.Artifact;

@@ -56,20 +52,30 @@
 /**

  * 

  */

-@Component( role = DependencyResolver.class, hint = "maven31" )

 class Maven31DependencyResolver

-    implements DependencyResolver

+    implements MavenDependencyResolver

 {

-    @Requirement

     private RepositorySystem repositorySystem;

 

-    @Requirement

     private ArtifactHandlerManager artifactHandlerManager;

 

+    private final RepositorySystemSession session;

+

+    private final List<RemoteRepository> aetherRepositories;

+

+    Maven31DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,

+                                      RepositorySystemSession session, List<RemoteRepository> aetherRepositories )

+    {

+        super();

+        this.repositorySystem = repositorySystem;

+        this.artifactHandlerManager = artifactHandlerManager;

+        this.session = session;

+        this.aetherRepositories = aetherRepositories;

+    }

+

     @Override

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                  DependableCoordinate coordinate,

+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( DependableCoordinate coordinate,

                                                                                                   TransformableFilter dependencyFilter )

                                                                                                       throws DependencyResolverException

     // CHECKSTYLE_ON: LineLength

@@ -80,20 +86,14 @@
 

         Dependency aetherRoot = toDependency( coordinate, typeRegistry );

 

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

-

         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );

 

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

+        return resolveDependencies( aetherRepositories, dependencyFilter, request );

     }

     

     @Override

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                  Model model,

+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,

                                                                                                   TransformableFilter dependencyFilter )

     // CHECKSTYLE_ON: LineLength

         throws DependencyResolverException

@@ -108,11 +108,6 @@
         

         Dependency aetherRoot = new Dependency( aetherArtifact, null );

         

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepositories =

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

-                                                     buildingRequest.getRemoteRepositories() );

-

         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );

         

         ArtifactTypeRegistry typeRegistry =

@@ -140,13 +135,12 @@
             request.setManagedDependencies( aetherManagerDependencies );

         }

 

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

+        return resolveDependencies( aetherRepositories, dependencyFilter, request );

     }

 

     @Override

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                  Collection<org.apache.maven.model.Dependency> mavenDependencies,

+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies,

                                                                                                   Collection<org.apache.maven.model.Dependency> managedMavenDependencies,

                                                                                                   TransformableFilter filter )

                                                                                                       throws DependencyResolverException

@@ -193,19 +187,13 @@
             }

         }

 

-        @SuppressWarnings( "unchecked" )

-        List<RemoteRepository> aetherRepos =

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

-                                                     buildingRequest.getRemoteRepositories() );

+        CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepositories );

 

-        CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepos );

-

-        return resolveDependencies( buildingRequest, aetherRepos, filter, request );

+        return resolveDependencies( aetherRepositories, filter, request );

     }

 

     // CHECKSTYLE_OFF: LineLength

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

-                                                                                                   List<RemoteRepository> aetherRepositories,

+    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( List<RemoteRepository> aetherRepositories,

                                                                                                    TransformableFilter dependencyFilter,

                                                                                                    CollectRequest request )

                                                                                                        throws DependencyResolverException

@@ -221,9 +209,6 @@
 

             DependencyRequest depRequest = new DependencyRequest( request, depFilter );

 

-            RepositorySystemSession session =

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

-

             final DependencyResult dependencyResults = repositorySystem.resolveDependencies( session, depRequest );

 

             // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive

diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
new file mode 100644
index 0000000..da0222d
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
@@ -0,0 +1,51 @@
+package org.apache.maven.shared.transfer.dependencies.resolve.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
+import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
+
+/**
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface MavenDependencyResolver
+{
+
+    Iterable<ArtifactResult> resolveDependencies( DependableCoordinate coordinate,
+                                                  TransformableFilter dependencyFilter )
+        throws DependencyResolverException;
+
+    Iterable<ArtifactResult> resolveDependencies( Model model, TransformableFilter dependencyFilter )
+        throws DependencyResolverException;
+
+    Iterable<ArtifactResult> resolveDependencies( Collection<Dependency> mavenDependencies,
+                                                  Collection<Dependency> managedMavenDependencies,
+                                                  TransformableFilter filter )
+        throws DependencyResolverException;
+
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
index b14ae41..a38dce6 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/DefaultRepositoryManager.java
@@ -28,6 +28,7 @@
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
 import org.apache.maven.shared.transfer.repository.RepositoryManager;
+import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
@@ -41,22 +42,18 @@
  */
 @Component( role = RepositoryManager.class )
 class DefaultRepositoryManager
-    implements RepositoryManager, Contextualizable
+    implements RepositoryManager, Contextualizable 
 {
     private PlexusContainer container;
-
+    
     @Override
     public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact )
     {
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint );
-
-            return effectiveRepositoryManager.getPathForLocalArtifact( buildingRequest, artifact );
+            return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( artifact );
         }
-        catch ( ComponentLookupException e )
+        catch ( ComponentLookupException | RepositoryManagerException e )
         {
             throw new IllegalStateException( e.getMessage(), e );
         }
@@ -67,13 +64,9 @@
     {
         try
         {
-            String hint = isMaven31() ? "maven31" : "maven3";
-
-            RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint );
-
-            return effectiveRepositoryManager.getPathForLocalArtifact( buildingRequest, coor );
+            return getMavenRepositoryManager( buildingRequest ).getPathForLocalArtifact( coor );
         }
-        catch ( ComponentLookupException e )
+        catch ( ComponentLookupException | RepositoryManagerException e )
         {
             throw new IllegalStateException( e.getMessage(), e );
         }
@@ -91,51 +84,38 @@
             pomCoordinate.setExtension( "pom" );
             return getPathForLocalArtifact( buildingRequest, pomCoordinate );
         }
-        
+
         try
         {
-            
-            String hint = isMaven31() ? "maven31" : "maven3";
-            
-            RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint );
-            
-            return effectiveRepositoryManager.getPathForLocalMetadata( buildingRequest, metadata );
+            return getMavenRepositoryManager( buildingRequest ).getPathForLocalMetadata( metadata );
         }
-        catch ( ComponentLookupException e )
+        catch ( ComponentLookupException | RepositoryManagerException e )
         {
             throw new IllegalStateException( e.getMessage(), e );
         }
     }
 
     @Override
-    public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir )
+    public ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest, File basedir )
     {
         try
         {
-            String hint = isMaven31() ? "maven31" : isMaven302() ? "maven302" : "maven3";
-
-            RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint );
-
-            return effectiveRepositoryManager.setLocalRepositoryBasedir( request, basedir );
+            return getMavenRepositoryManager( buildingRequest ).setLocalRepositoryBasedir( buildingRequest, basedir );
         }
-        catch ( ComponentLookupException e )
+        catch ( ComponentLookupException | RepositoryManagerException e )
         {
             throw new IllegalStateException( e.getMessage(), e );
         }
     }
 
     @Override
-    public File getLocalRepositoryBasedir( ProjectBuildingRequest request )
+    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
     {
         try
         {
-            String hint = isMaven31() ? "maven31" : isMaven302() ? "maven302" : "maven3";
-
-            RepositoryManager effectiveRepositoryManager = container.lookup( RepositoryManager.class, hint );
-
-            return effectiveRepositoryManager.getLocalRepositoryBasedir( request );
+            return getMavenRepositoryManager( buildingRequest ).getLocalRepositoryBasedir();
         }
-        catch ( ComponentLookupException e )
+        catch ( ComponentLookupException | RepositoryManagerException e )
         {
             throw new IllegalStateException( e.getMessage(), e );
         }
@@ -170,15 +150,41 @@
             return false;
         }
     }
+    
+    private MavenRepositoryManager getMavenRepositoryManager( ProjectBuildingRequest buildingRequest )
+        throws ComponentLookupException, RepositoryManagerException
+    {
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem m31RepositorySystem =
+                            container.lookup( org.eclipse.aether.RepositorySystem.class );
 
-    /**
-     * Injects the Plexus content.
-     *
-     * @param context Plexus context to inject.
-     * @throws ContextException if the PlexusContainer could not be located.
-     */
-    public void contextualize( Context context )
-        throws ContextException
+            org.eclipse.aether.RepositorySystemSession session =
+                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+
+            return new Maven31RepositoryManager( m31RepositorySystem, session );
+        }
+        else
+        {
+            org.sonatype.aether.RepositorySystem m30RepositorySystem =
+                container.lookup( org.sonatype.aether.RepositorySystem.class );
+
+            org.sonatype.aether.RepositorySystemSession session =
+                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            
+            if ( isMaven302() )
+            {
+                return new Maven302RepositoryManager( m30RepositorySystem, session );
+                
+            }
+            else
+            {
+                return new Maven30RepositoryManager( m30RepositorySystem, session );
+            }
+        }
+    }
+    
+    public void contextualize( Context context ) throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
index 0bd1bab..29178f4 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven302RepositoryManager.java
@@ -19,17 +19,20 @@
  * under the License.
  */
 
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
-import org.codehaus.plexus.component.annotations.Component;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.repository.LocalRepository;
 
 /**
  * 
  */
-@Component( role = RepositoryManager.class, hint = "maven302" )
 class Maven302RepositoryManager
     extends Maven30RepositoryManager
 {
+    Maven302RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session )
+    {
+        super( repositorySystem, session );
+    }
 
     /**
      * Aether-1.9+ (i.e. M3.0.2+) expects "default", not "enhanced" as repositoryType
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
index 9fbaea9..936ea12 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManager.java
@@ -22,15 +22,11 @@
 import java.io.File;
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
 import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -46,32 +42,29 @@
 /**
  * 
  */
-@Component( role = RepositoryManager.class, hint = "maven3" )
 class Maven30RepositoryManager
-    implements RepositoryManager
+    implements MavenRepositoryManager
 {
+    private final RepositorySystem repositorySystem;
 
-    @Requirement
-    private RepositorySystem repositorySystem;
-
-    @Requirement
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final RepositorySystemSession session;
+    
+    Maven30RepositoryManager( RepositorySystem repositorySystem, RepositorySystemSession session )
+    {
+        this.repositorySystem = repositorySystem;
+        this.session = session;
+    }
 
     @Override
-    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest,
-                                           org.apache.maven.artifact.Artifact mavenArtifact )
+    public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
     {
         Artifact aetherArtifact;
 
-        RepositorySystemSession session;
-
         // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
         try
         {
             aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                         org.apache.maven.artifact.Artifact.class, mavenArtifact );
-
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
         }
         catch ( RepositoryManagerException e )
         {
@@ -82,29 +75,17 @@
     }
 
     @Override
-    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
+    public String getPathForLocalArtifact( ArtifactCoordinate coordinate )
     {
-        Artifact aetherArtifact;
-
-        RepositorySystemSession session;
+        Artifact aetherArtifact = toArtifact( coordinate );
 
         // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
-        try
-        {
-            aetherArtifact = toArtifact( coordinate );
-
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
 
         return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
     }
 
     @Override
-    public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata )
+    public String getPathForLocalMetadata( ArtifactMetadata metadata )
     {
         Metadata aetherMetadata =
             new DefaultMetadata( metadata.getGroupId(),
@@ -112,15 +93,6 @@
                                  metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null,
                                  "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT );
 
-        RepositorySystemSession session;
-        try
-        {
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
         return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata );
     }
     
@@ -166,17 +138,8 @@
     }
 
     @Override
-    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
+    public File getLocalRepositoryBasedir()
     {
-        RepositorySystemSession session;
-        try
-        {
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
         return session.getLocalRepository().getBasedir();
     }
 
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
index d7f4d6e..86ae613 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
@@ -22,15 +22,11 @@
 import java.io.File;
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
 import org.apache.maven.shared.transfer.repository.RepositoryManagerException;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.DefaultRepositoryCache;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
@@ -46,30 +42,30 @@
 /**
  * 
  */
-@Component( role = RepositoryManager.class, hint = "maven31" )
 class Maven31RepositoryManager
-    implements RepositoryManager
+    implements MavenRepositoryManager
 {
-    @Requirement
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
 
-    @Requirement
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final RepositorySystemSession session;
+
+    Maven31RepositoryManager( RepositorySystem repositorySystem, 
+                              RepositorySystemSession session )
+    {
+        this.repositorySystem = repositorySystem;
+        this.session = session;
+    }
 
     @Override
-    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest,
-                                           org.apache.maven.artifact.Artifact mavenArtifact )
+    public String getPathForLocalArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
     {
         Artifact aetherArtifact;
-        RepositorySystemSession session;
 
         // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
         try
         {
             aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                         org.apache.maven.artifact.Artifact.class, mavenArtifact );
-
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
         }
         catch ( RepositoryManagerException e )
         {
@@ -80,29 +76,15 @@
     }
 
     @Override
-    public String getPathForLocalArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
+    public String getPathForLocalArtifact( ArtifactCoordinate coordinate )
     {
-        Artifact aetherArtifact;
-
-        RepositorySystemSession session;
-
-        // LRM.getPathForLocalArtifact() won't throw an Exception, so translate reflection error to RuntimeException
-        try
-        {
-            aetherArtifact = toArtifact( coordinate );
-
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
+        Artifact aetherArtifact = toArtifact( coordinate );
 
         return session.getLocalRepositoryManager().getPathForLocalArtifact( aetherArtifact );
     }
     
     @Override
-    public String getPathForLocalMetadata( ProjectBuildingRequest buildingRequest, ArtifactMetadata metadata )
+    public String getPathForLocalMetadata( ArtifactMetadata metadata )
     {
         Metadata aetherMetadata =
             new DefaultMetadata( metadata.getGroupId(),
@@ -110,15 +92,6 @@
                                  metadata.storedInArtifactVersionDirectory() ? metadata.getBaseVersion() : null,
                                  "maven-metadata.xml", Nature.RELEASE_OR_SNAPSHOT );
 
-        RepositorySystemSession session;
-        try
-        {
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
         return session.getLocalRepositoryManager().getPathForLocalMetadata( aetherMetadata );
     }
 
@@ -164,18 +137,8 @@
     }
 
     @Override
-    public File getLocalRepositoryBasedir( ProjectBuildingRequest buildingRequest )
+    public File getLocalRepositoryBasedir()
     {
-        RepositorySystemSession session;
-        try
-        {
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-        }
-        catch ( RepositoryManagerException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
-
         return session.getLocalRepository().getBasedir();
     }
 
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
new file mode 100644
index 0000000..e494b15
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/MavenRepositoryManager.java
@@ -0,0 +1,67 @@
+package org.apache.maven.shared.transfer.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
+
+/**
+ * 
+ * @author Robert Scholte
+ */
+interface MavenRepositoryManager
+{
+    /**
+     * @param artifact {@link Artifact}
+     * @return the path of the local artifact.
+     */
+    String getPathForLocalArtifact( Artifact artifact );
+
+    /**
+     * @param coordinate {@link ArtifactCoordinate}
+     * @return the path for the local artifact.
+     */
+    String getPathForLocalArtifact( ArtifactCoordinate coordinate );
+    
+    /**
+     * @param metadata {@link ArtifactMetadata}
+     * @return the path of the local metadata.
+     */
+    String getPathForLocalMetadata( ArtifactMetadata metadata );
+
+    /**
+     * Create a new {@code ProjectBuildingRequest} with an adjusted repository session.
+     * 
+     * @param basedir the base directory of the local repository
+     * @return a new project building request
+     */
+    ProjectBuildingRequest setLocalRepositoryBasedir( ProjectBuildingRequest request, File basedir );
+
+    /**
+     * Get the localRepositryBasedir as specified in the repository session of the request
+     * 
+     * @return the local repository base directory
+     */
+    File getLocalRepositoryBasedir();
+}
diff --git a/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java b/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
index b5693f1..19d1939 100644
--- a/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
+++ b/src/test/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstallerTest.java
@@ -28,22 +28,22 @@
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
-import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.internal.Maven30ArtifactInstaller;
 import org.codehaus.plexus.PlexusTestCase;
+import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 
 public class Maven30ArtifactInstallerTest extends PlexusTestCase
 {
     private final File localRepo = new File( "target/tests/local-repo" );
     
-    private Maven30ArtifactInstaller installer;
+    private RepositorySystem repositorySystem;
 
     @Override
     public void setUp() throws Exception
     {
         super.setUp();
-        installer = (Maven30ArtifactInstaller) super.lookup( ArtifactInstaller.class, "maven3" );
+        repositorySystem = lookup( RepositorySystem.class );
     }
 
     public void testInstall() throws Exception
@@ -67,7 +67,8 @@
         
         Collection<Artifact> mavenArtifacts = Arrays.<Artifact>asList( artifact, artifactWithClassifier );
         
-        installer.install( buildingRequest, mavenArtifacts );
+        MavenArtifactInstaller installer = new Maven30ArtifactInstaller( repositorySystem, repositorySession );
+        installer.install( mavenArtifacts );
         
         assertTrue( new File( localRepo, "GROUPID/ARTIFACTID/VERSION/ARTIFACTID-VERSION.EXTENSION" ).exists() );
         assertTrue( new File( localRepo, "GROUPID/ARTIFACTID/VERSION/ARTIFACTID-VERSION-CLASSIFIER.EXTENSION" ).exists() );
diff --git a/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java b/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java
index faa9e1a..b426316 100644
--- a/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java
+++ b/src/test/java/org/apache/maven/shared/transfer/repository/internal/Maven30RepositoryManagerTest.java
@@ -24,9 +24,9 @@
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
-import org.apache.maven.shared.transfer.repository.RepositoryManager;
 import org.apache.maven.shared.transfer.repository.internal.Maven30RepositoryManager;
 import org.codehaus.plexus.PlexusTestCase;
+import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.impl.internal.EnhancedLocalRepositoryManager;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 
@@ -35,13 +35,13 @@
 
     private final File localRepo = new File( "target/tests/local-repo" );
     
-    private Maven30RepositoryManager repositoryManager;
+    private RepositorySystem repositorySystem;
 
     @Override
     public void setUp() throws Exception
     {
         super.setUp();
-        repositoryManager = (Maven30RepositoryManager) super.lookup( RepositoryManager.class, "maven3" );
+        repositorySystem = lookup( RepositorySystem.class );
     }
     
     public void testSetLocalRepositoryBasedirSimple() throws Exception
@@ -53,6 +53,9 @@
 
         File basedir = new File( "NEW/LOCAL/REPO" );
         
+        Maven30RepositoryManager repositoryManager =
+            new Maven30RepositoryManager( repositorySystem, buildingRequest.getRepositorySession() );
+        
         ProjectBuildingRequest newBuildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, basedir );
         
         assertEquals( basedir.getAbsoluteFile(), newBuildingRequest.getRepositorySession().getLocalRepository().getBasedir() );
@@ -68,6 +71,9 @@
 
         File basedir = new File( "NEW/LOCAL/REPO" );
         
+        Maven30RepositoryManager repositoryManager =
+            new Maven30RepositoryManager( repositorySystem, buildingRequest.getRepositorySession() );
+        
         ProjectBuildingRequest newBuildingRequest = repositoryManager.setLocalRepositoryBasedir( buildingRequest, basedir );
         
         assertEquals( basedir.getAbsoluteFile(), newBuildingRequest.getRepositorySession().getLocalRepository().getBasedir() );