runtime support
diff --git a/pom.xml b/pom.xml
index 4ac93da..bf0f459 100644
--- a/pom.xml
+++ b/pom.xml
@@ -101,6 +101,11 @@
       </exclusions>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>${mavenVersion}</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.maven.resolver</groupId>
       <artifactId>maven-resolver-api</artifactId>
       <version>${resolverVersion}</version>
@@ -205,6 +210,12 @@
       </exclusions>
     </dependency>
     <dependency>
+      <groupId>com.google.inject</groupId>
+      <artifactId>guice</artifactId>
+      <classifier>no_aop</classifier>
+      <version>4.2.3</version>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>${junitVersion}</version>
@@ -240,6 +251,12 @@
       <version>${resolverVersion}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-compat</artifactId>
+      <version>${mavenVersion}</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <repositories>
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java b/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java
index 888942b..e8f004d 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/AntRepoSys.java
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -37,6 +41,7 @@
 import java.util.Properties;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.building.DefaultModelBuilderFactory;
 import org.apache.maven.model.building.DefaultModelBuildingRequest;
@@ -45,12 +50,7 @@
 import org.apache.maven.model.building.ModelBuildingException;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.resolution.ModelResolver;
-import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
-import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
-import org.apache.maven.repository.internal.DefaultVersionResolver;
 import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
-import org.apache.maven.repository.internal.SnapshotMetadataGeneratorFactory;
-import org.apache.maven.repository.internal.VersionsMetadataGeneratorFactory;
 import org.apache.maven.resolver.internal.ant.types.Artifact;
 import org.apache.maven.resolver.internal.ant.types.Artifacts;
 import org.apache.maven.resolver.internal.ant.types.Authentication;
@@ -65,6 +65,7 @@
 import org.apache.maven.resolver.internal.ant.types.RemoteRepositories;
 import org.apache.maven.resolver.internal.ant.types.RemoteRepository;
 import org.apache.maven.resolver.internal.ant.types.RemoteRepository.Policy;
+import org.apache.maven.session.scope.internal.SessionScope;
 import org.apache.maven.settings.Profile;
 import org.apache.maven.settings.Repository;
 import org.apache.maven.settings.RepositoryPolicy;
@@ -82,6 +83,9 @@
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.taskdefs.condition.Os;
 import org.apache.tools.ant.types.Reference;
+import org.codehaus.plexus.DefaultContainerConfiguration;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.eclipse.aether.ConfigurationProperties;
 import org.eclipse.aether.DefaultRepositoryCache;
@@ -92,27 +96,15 @@
 import org.eclipse.aether.collection.CollectRequest;
 import org.eclipse.aether.collection.CollectResult;
 import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
 import org.eclipse.aether.deployment.DeployRequest;
 import org.eclipse.aether.deployment.DeploymentException;
-import org.eclipse.aether.impl.ArtifactDescriptorReader;
-import org.eclipse.aether.impl.DefaultServiceLocator;
-import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.impl.RemoteRepositoryManager;
-import org.eclipse.aether.impl.VersionRangeResolver;
-import org.eclipse.aether.impl.VersionResolver;
 import org.eclipse.aether.installation.InstallRequest;
 import org.eclipse.aether.installation.InstallationException;
 import org.eclipse.aether.repository.AuthenticationSelector;
 import org.eclipse.aether.repository.LocalRepositoryManager;
 import org.eclipse.aether.repository.MirrorSelector;
 import org.eclipse.aether.repository.ProxySelector;
-import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
-import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.transport.classpath.ClasspathTransporterFactory;
-import org.eclipse.aether.transport.file.FileTransporterFactory;
-import org.eclipse.aether.transport.http.HttpTransporterFactory;
 import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.eclipse.aether.util.repository.ConservativeAuthenticationSelector;
 import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
@@ -134,7 +126,7 @@
 
     private final Project project;
 
-    private final DefaultServiceLocator locator;
+    private SessionScope sessionScope;
 
     private RepositorySystem repoSys;
 
@@ -174,23 +166,41 @@
         return instance;
     }
 
+    @Singleton @Named
+    static class Locator
+    {
+
+        @Inject
+        RepositorySystem repositorySystem;
+
+        @Inject
+        RemoteRepositoryManager remoteRepositoryManager;
+
+        @Inject
+        SessionScope sessionScope;
+
+    }
+
     private AntRepoSys( Project project )
     {
         this.project = project;
 
-        locator = new DefaultServiceLocator();
-        locator.setErrorHandler( new AntServiceLocatorErrorHandler( project ) );
-        locator.setServices( Logger.class, new AntLogger( project ) );
-        locator.setServices( ModelBuilder.class, MODEL_BUILDER );
-        locator.addService( RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class );
-        locator.addService( TransporterFactory.class, FileTransporterFactory.class );
-        locator.addService( TransporterFactory.class, HttpTransporterFactory.class );
-        locator.addService( TransporterFactory.class, ClasspathTransporterFactory.class );
-        locator.addService( ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class );
-        locator.addService( VersionResolver.class, DefaultVersionResolver.class );
-        locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
-        locator.addService( MetadataGeneratorFactory.class, SnapshotMetadataGeneratorFactory.class );
-        locator.addService( MetadataGeneratorFactory.class, VersionsMetadataGeneratorFactory.class );
+        try
+        {
+            DefaultPlexusContainer container = new DefaultPlexusContainer(
+                    new DefaultContainerConfiguration()
+                            .setJSR250Lifecycle( true )
+                            .setClassPathScanning( PlexusConstants.SCANNING_INDEX )
+            );
+            Locator locator = container.lookup( Locator.class );
+            sessionScope = locator.sessionScope;
+            repoSys = locator.repositorySystem;
+            remoteRepoMan = locator.remoteRepositoryManager;
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e );
+        }
     }
 
     private void initDefaults()
@@ -215,7 +225,7 @@
     {
         if ( repoSys == null )
         {
-            repoSys = locator.getService( RepositorySystem.class );
+//            repoSys = locator.getService( RepositorySystem.class );
             if ( repoSys == null )
             {
                 throw new BuildException( "The repository system could not be initialized" );
@@ -228,7 +238,7 @@
     {
         if ( remoteRepoMan == null )
         {
-            remoteRepoMan = locator.getService( RemoteRepositoryManager.class );
+//            remoteRepoMan = locator.getService( RemoteRepositoryManager.class );
             if ( remoteRepoMan == null )
             {
                 throw new BuildException( "The repository system could not be initialized" );
@@ -855,6 +865,8 @@
         InstallRequest request = new InstallRequest();
         request.setArtifacts( toArtifacts( task, session, pom, artifacts ) );
 
+        sessionScope.enter();
+        sessionScope.seed( MavenSession.class, (MavenSession) null );
         try
         {
             getSystem().install( session, request );
@@ -863,6 +875,10 @@
         {
             throw new BuildException( "Could not install artifacts: " + e.getMessage(), e );
         }
+        finally
+        {
+            sessionScope.exit();
+        }
     }
 
     public void deploy( Task task, Pom pom, Artifacts artifacts, RemoteRepository releaseRepository,
@@ -876,6 +892,8 @@
         RemoteRepository distRepo = ( snapshot && snapshotRepository != null ) ? snapshotRepository : releaseRepository;
         request.setRepository( ConverterUtils.toDistRepository( distRepo, session ) );
 
+        sessionScope.enter();
+        sessionScope.seed( MavenSession.class, (MavenSession) null );
         try
         {
             getSystem().deploy( session, request );
@@ -884,6 +902,10 @@
         {
             throw new BuildException( "Could not deploy artifacts: " + e.getMessage(), e );
         }
+        finally
+        {
+            sessionScope.exit();
+        }
     }
 
     private List<org.eclipse.aether.artifact.Artifact> toArtifacts( Task task, RepositorySystemSession session,