You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/08/25 00:46:12 UTC

svn commit: r988749 [6/9] - in /maven/maven-3/trunk: ./ apache-maven/ maven-aether-provider/ maven-aether-provider/src/ maven-aether-provider/src/main/ maven-aether-provider/src/main/java/ maven-aether-provider/src/main/java/org/ maven-aether-provider/...

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java Tue Aug 24 22:46:07 2010
@@ -229,6 +229,10 @@ public class PluginParameterExpressionEv
                                                          e );
             }
         }
+        else if ( expression.equals( "repositorySystemSession" ) )
+        {
+            value = session.getRepositorySession();
+        }
         else if ( expression.equals( "mojo" ) )
         {
             value = mojoExecution;

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java Tue Aug 24 22:46:07 2010
@@ -22,17 +22,18 @@ package org.apache.maven.plugin;
 import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.repository.RemoteRepository;
 
 /**
  * Caches plugin class realms. <strong>Warning:</strong> This is an internal utility interface that is only public for
  * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
  * prior notice.
- *
+ * 
  * @author Igor Fedorenko
  * @author Benjamin Bentmann
  */
@@ -42,6 +43,7 @@ public interface PluginRealmCache
     public static class CacheRecord
     {
         public final ClassRealm realm;
+
         public final List<Artifact> artifacts;
 
         public CacheRecord( ClassRealm realm, List<Artifact> artifacts )
@@ -51,14 +53,20 @@ public interface PluginRealmCache
         }
     }
 
-    CacheRecord get( Plugin plugin, ClassLoader parentRealm, List<String> parentImports,
-                     ArtifactFilter dependencyFilter, ArtifactRepository localRepository,
-                     List<ArtifactRepository> remoteRepositories );
-
-    CacheRecord put( Plugin plugin, ClassLoader parentRealm, List<String> parentImports,
-                     ArtifactFilter dependencyFilter, ArtifactRepository localRepository,
-                     List<ArtifactRepository> remoteRepositories, ClassRealm pluginRealm,
-                     List<Artifact> pluginArtifacts );
+    /**
+     * A cache key.
+     */
+    interface Key
+    {
+        // marker interface for cache keys
+    }
+
+    Key createKey( Plugin plugin, ClassLoader parentRealm, List<String> parentImports,
+                   DependencyFilter dependencyFilter, List<RemoteRepository> repositories, RepositorySystemSession session );
+
+    CacheRecord get( Key key );
+
+    CacheRecord put( Key key, ClassRealm pluginRealm, List<Artifact> pluginArtifacts );
 
     void flush();
 
@@ -66,7 +74,7 @@ public interface PluginRealmCache
      * Registers the specified cache record for usage with the given project. Integrators can use the information
      * collected from this method in combination with a custom cache implementation to dispose unused records from the
      * cache.
-     *
+     * 
      * @param project The project that employs the plugin realm, must not be {@code null}.
      * @param record The cache record being used for the project, must not be {@code null}.
      */

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java Tue Aug 24 22:46:07 2010
@@ -19,8 +19,6 @@ package org.apache.maven.plugin;
  * under the License.
  */
 
-import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.model.Plugin;
 
 /**
@@ -30,15 +28,15 @@ import org.apache.maven.model.Plugin;
  * @version $Id$
  */
 public class PluginResolutionException
-    extends AbstractArtifactResolutionException
+    extends Exception
 {
+
     private final Plugin plugin;
 
-    public PluginResolutionException( Plugin plugin, ArtifactResolutionException e )
+    public PluginResolutionException( Plugin plugin, Throwable cause )
     {
-        super( "Plugin " + plugin.getId() + " or one of its dependencies could not be resolved: " + e.getMessage(),
-               e.getGroupId(), e.getArtifactId(), e.getVersion(), e.getType(), null, e.getRemoteRepositories(), null,
-               e );
+        super( "Plugin " + plugin.getId() + " or one of its dependencies could not be resolved: " + cause.getMessage(),
+               cause );
         this.plugin = plugin;
     }
 
@@ -46,4 +44,5 @@ public class PluginResolutionException
     {
         return plugin;
     }
+
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java Tue Aug 24 22:46:07 2010
@@ -22,6 +22,7 @@ package org.apache.maven.plugin.internal
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.LegacySupport;
 import org.codehaus.plexus.component.annotations.Component;
+import org.sonatype.aether.RepositorySystemSession;
 
 /**
  * Helps to provide backward-compatibility with plugins that use legacy components. <strong>Warning:</strong> This is an
@@ -55,4 +56,10 @@ public class DefaultLegacySupport
         return session.get();
     }
 
+    public RepositorySystemSession getRepositorySession()
+    {
+        MavenSession session = getSession();
+        return ( session != null ) ? session.getRepositorySession() : null;
+    }
+
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java Tue Aug 24 22:46:07 2010
@@ -28,18 +28,16 @@ import java.io.InputStream;
 import java.io.PrintStream;
 import java.io.Reader;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.RepositoryRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.classrealm.ClassRealmManager;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Plugin;
@@ -86,6 +84,12 @@ import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.util.filter.AndDependencyFilter;
+import org.sonatype.aether.util.graph.PreorderNodeListGenerator;
 
 /**
  * Provides basic services to manage Maven plugins and their mojos. This component is kept general in its design such
@@ -120,17 +124,17 @@ public class DefaultMavenPluginManager
 
     private PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
 
-    public synchronized PluginDescriptor getPluginDescriptor( Plugin plugin, RepositoryRequest repositoryRequest )
+    public synchronized PluginDescriptor getPluginDescriptor( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
         throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException
     {
-        PluginDescriptorCache.Key cacheKey = pluginDescriptorCache.createKey( plugin, repositoryRequest );
+        PluginDescriptorCache.Key cacheKey = pluginDescriptorCache.createKey( plugin, repositories, session );
 
         PluginDescriptor pluginDescriptor = pluginDescriptorCache.get( cacheKey );
 
         if ( pluginDescriptor == null )
         {
             Artifact pluginArtifact =
-                pluginDependenciesResolver.resolve( plugin, new ArtifactResolutionRequest( repositoryRequest ) );
+                RepositoryUtils.toArtifact( pluginDependenciesResolver.resolve( plugin, repositories, session ) );
 
             pluginDescriptor = extractPluginDescriptor( pluginArtifact, plugin );
 
@@ -239,11 +243,12 @@ public class DefaultMavenPluginManager
         }
     }
 
-    public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, RepositoryRequest repositoryRequest )
+    public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
+                                             RepositorySystemSession session )
         throws MojoNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         InvalidPluginDescriptorException
     {
-        PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin, repositoryRequest );
+        PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin, repositories, session );
 
         MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal );
 
@@ -256,16 +261,18 @@ public class DefaultMavenPluginManager
     }
 
     public synchronized void setupPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session,
-                                               ClassLoader parent, List<String> imports, ArtifactFilter filter )
+                                               ClassLoader parent, List<String> imports, DependencyFilter filter )
         throws PluginResolutionException, PluginContainerException
     {
         Plugin plugin = pluginDescriptor.getPlugin();
 
         MavenProject project = session.getCurrentProject();
 
-        PluginRealmCache.CacheRecord cacheRecord =
-            pluginRealmCache.get( plugin, parent, imports, filter, session.getLocalRepository(),
-                                  project.getPluginArtifactRepositories() );
+        PluginRealmCache.Key cacheKey =
+            pluginRealmCache.createKey( plugin, parent, imports, filter, project.getRemotePluginRepositories(),
+                                        session.getRepositorySession() );
+
+        PluginRealmCache.CacheRecord cacheRecord = pluginRealmCache.get( cacheKey );
 
         if ( cacheRecord != null )
         {
@@ -277,16 +284,14 @@ public class DefaultMavenPluginManager
             createPluginRealm( pluginDescriptor, session, parent, imports, filter );
 
             cacheRecord =
-                pluginRealmCache.put( plugin, parent, imports, filter, session.getLocalRepository(),
-                                      project.getPluginArtifactRepositories(), pluginDescriptor.getClassRealm(),
-                                      pluginDescriptor.getArtifacts() );
+                pluginRealmCache.put( cacheKey, pluginDescriptor.getClassRealm(), pluginDescriptor.getArtifacts() );
         }
 
         pluginRealmCache.register( project, cacheRecord );
     }
 
     private void createPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session, ClassLoader parent,
-                                    List<String> imports, ArtifactFilter filter )
+                                    List<String> imports, DependencyFilter filter )
         throws PluginResolutionException, PluginContainerException
     {
         Plugin plugin = pluginDescriptor.getPlugin();
@@ -305,42 +310,32 @@ public class DefaultMavenPluginManager
 
         MavenProject project = session.getCurrentProject();
 
-        ArtifactResolutionRequest request = new ArtifactResolutionRequest();
-        request.setLocalRepository( session.getLocalRepository() );
-        request.setRemoteRepositories( project.getPluginArtifactRepositories() );
-        request.setCache( session.getRepositoryCache() );
-        request.setOffline( session.isOffline() );
-        request.setForceUpdate( session.getRequest().isUpdateSnapshots() );
-        request.setServers( session.getRequest().getServers() );
-        request.setMirrors( session.getRequest().getMirrors() );
-        request.setProxies( session.getRequest().getProxies() );
-        request.setTransferListener( session.getRequest().getTransferListener() );
+        DependencyFilter dependencyFilter = project.getExtensionDependencyFilter();
+        dependencyFilter = AndDependencyFilter.newInstance( dependencyFilter, filter );
 
-        ArtifactFilter dependencyFilter = project.getExtensionArtifactFilter();
-        if ( dependencyFilter == null )
-        {
-            dependencyFilter = filter;
-        }
-        else if ( filter != null )
-        {
-            dependencyFilter = new AndArtifactFilter( Arrays.asList( dependencyFilter, filter ) );
-        }
+        DependencyNode root =
+            pluginDependenciesResolver.resolve( plugin, RepositoryUtils.toArtifact( pluginArtifact ), dependencyFilter,
+                                                project.getRemotePluginRepositories(), session.getRepositorySession() );
 
-        List<Artifact> pluginArtifacts =
-            pluginDependenciesResolver.resolve( plugin, pluginArtifact, request, dependencyFilter );
+        PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+        root.accept( nlg );
 
-        ClassRealm pluginRealm = classRealmManager.createPluginRealm( plugin, parent, imports, pluginArtifacts );
-
-        List<Artifact> exposedPluginArtifacts = new ArrayList<Artifact>();
-
-        for ( Artifact artifact : pluginArtifacts )
+        List<Artifact> exposedPluginArtifacts = new ArrayList<Artifact>( nlg.getNodes().size() );
+        RepositoryUtils.toArtifacts( exposedPluginArtifacts, Collections.singleton( root ),
+                                     Collections.<String> emptyList(), null );
+        for ( Iterator<Artifact> it = exposedPluginArtifacts.iterator(); it.hasNext(); )
         {
-            if ( artifact.getFile() != null )
+            Artifact artifact = it.next();
+            if ( artifact.getFile() == null )
             {
-                exposedPluginArtifacts.add( artifact );
+                it.remove();
             }
         }
 
+        List<org.sonatype.aether.artifact.Artifact> pluginArtifacts = nlg.getArtifacts( true );
+
+        ClassRealm pluginRealm = classRealmManager.createPluginRealm( plugin, parent, imports, pluginArtifacts );
+
         pluginDescriptor.setClassRealm( pluginRealm );
         pluginDescriptor.setArtifacts( exposedPluginArtifacts );
 

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java Tue Aug 24 22:46:07 2010
@@ -19,28 +19,37 @@ package org.apache.maven.plugin.internal
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.maven.ArtifactFilterManager;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.RepositoryRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
-import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.PluginResolutionException;
-import org.apache.maven.repository.RepositorySystem;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.collection.CollectRequest;
+import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.collection.DependencyGraphTransformer;
+import org.sonatype.aether.collection.DependencySelector;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.graph.DependencyVisitor;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.resolution.ArtifactRequest;
+import org.sonatype.aether.resolution.ArtifactResolutionException;
+import org.sonatype.aether.util.DefaultRepositorySystemSession;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+import org.sonatype.aether.util.artifact.JavaScopes;
+import org.sonatype.aether.util.filter.AndDependencyFilter;
+import org.sonatype.aether.util.filter.ExclusionsDependencyFilter;
+import org.sonatype.aether.util.filter.ScopeDependencyFilter;
+import org.sonatype.aether.util.graph.selector.AndDependencySelector;
+import org.sonatype.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
 
 /**
  * Assists in resolving the dependencies of a plugin. <strong>Warning:</strong> This is an internal utility class that
@@ -55,29 +64,32 @@ public class DefaultPluginDependenciesRe
     implements PluginDependenciesResolver
 {
 
-    @Requirement
-    protected RepositorySystem repositorySystem;
+    private static final String REPOSITORY_CONTEXT = "plugin";
 
     @Requirement
-    private ResolutionErrorHandler resolutionErrorHandler;
+    private Logger logger;
 
     @Requirement
     private ArtifactFilterManager artifactFilterManager;
 
-    public Artifact resolve( Plugin plugin, ArtifactResolutionRequest request )
-        throws PluginResolutionException
-    {
-        Artifact pluginArtifact = repositorySystem.createPluginArtifact( plugin );
+    @Requirement
+    private RepositorySystem repoSystem;
 
-        request.setArtifact( pluginArtifact );
-        request.setResolveRoot( true );
-        request.setResolveTransitively( false );
+    private Artifact toArtifact( Plugin plugin, RepositorySystemSession session )
+    {
+        return new DefaultArtifact( plugin.getGroupId(), plugin.getArtifactId(), null, "jar", plugin.getVersion(),
+                                    session.getArtifactTypeRegistry().get( "maven-plugin" ) );
+    }
 
-        ArtifactResolutionResult result = repositorySystem.resolve( request );
+    public Artifact resolve( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+        throws PluginResolutionException
+    {
+        Artifact pluginArtifact = toArtifact( plugin, session );
 
         try
         {
-            resolutionErrorHandler.throwErrors( request, result );
+            ArtifactRequest request = new ArtifactRequest( pluginArtifact, repositories, REPOSITORY_CONTEXT );
+            pluginArtifact = repoSystem.resolveArtifact( session, request ).getArtifact();
         }
         catch ( ArtifactResolutionException e )
         {
@@ -87,96 +99,113 @@ public class DefaultPluginDependenciesRe
         return pluginArtifact;
     }
 
-    public List<Artifact> resolve( Plugin plugin, Artifact pluginArtifact, ArtifactResolutionRequest request,
-                                   ArtifactFilter dependencyFilter )
+    public DependencyNode resolve( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+                                   List<RemoteRepository> repositories, RepositorySystemSession session )
         throws PluginResolutionException
     {
         if ( pluginArtifact == null )
         {
-            pluginArtifact = repositorySystem.createPluginArtifact( plugin );
-        }
-
-        Set<Artifact> overrideArtifacts = new LinkedHashSet<Artifact>();
-        for ( Dependency dependency : plugin.getDependencies() )
-        {
-	          if ( !Artifact.SCOPE_SYSTEM.equals( dependency.getScope() ) )
-	          {
-	              dependency.setScope( Artifact.SCOPE_RUNTIME );
-	          }
-            overrideArtifacts.add( repositorySystem.createDependencyArtifact( dependency ) );
+            pluginArtifact = toArtifact( plugin, session );
         }
 
-        ArtifactFilter collectionFilter = new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM );
+        DependencyFilter collectionFilter = new ScopeDependencyFilter( "provided", "test" );
 
-        ArtifactFilter resolutionFilter = artifactFilterManager.getCoreArtifactFilter();
+        DependencyFilter resolutionFilter =
+            new ExclusionsDependencyFilter( artifactFilterManager.getCoreArtifactExcludes() );
+        resolutionFilter = AndDependencyFilter.newInstance( resolutionFilter, dependencyFilter );
+        resolutionFilter = new AndDependencyFilter( collectionFilter, resolutionFilter );
 
-        PluginDependencyResolutionListener listener = new PluginDependencyResolutionListener( resolutionFilter );
+        DependencyNode node;
 
-        if ( dependencyFilter != null )
+        try
         {
-            resolutionFilter = new AndArtifactFilter( Arrays.asList( resolutionFilter, dependencyFilter ) );
-        }
+            DependencySelector selector =
+                AndDependencySelector.newInstance( session.getDependencySelector(), new WagonExcluder() );
 
-        request.setArtifact( pluginArtifact );
-        request.setArtifactDependencies( overrideArtifacts );
-        request.setCollectionFilter( collectionFilter );
-        request.setResolutionFilter( resolutionFilter );
-        request.setResolveRoot( true );
-        request.setResolveTransitively( true );
-        request.addListener( listener );
+            DependencyGraphTransformer transformer =
+                ChainedDependencyGraphTransformer.newInstance( session.getDependencyGraphTransformer(),
+                                                               new PlexusUtilsInjector() );
+
+            DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession( session );
+            pluginSession.setDependencySelector( selector );
+            pluginSession.setDependencyGraphTransformer( transformer );
+
+            CollectRequest request = new CollectRequest();
+            request.setRequestContext( REPOSITORY_CONTEXT );
+            request.setRepositories( repositories );
+            request.setRoot( new org.sonatype.aether.graph.Dependency( pluginArtifact, null ) );
+            for ( Dependency dependency : plugin.getDependencies() )
+            {
+                org.sonatype.aether.graph.Dependency pluginDep =
+                    RepositoryUtils.toDependency( dependency, session.getArtifactTypeRegistry() );
+                if ( !JavaScopes.SYSTEM.equals( pluginDep.getScope() ) )
+                {
+                    pluginDep = pluginDep.setScope( JavaScopes.RUNTIME );
+                }
+                request.addDependency( pluginDep );
+            }
 
-        ArtifactResolutionResult result = repositorySystem.resolve( request );
+            node = repoSystem.collectDependencies( pluginSession, request ).getRoot();
 
-        try
+            if ( logger.isDebugEnabled() )
+            {
+                node.accept( new GraphLogger() );
+            }
+
+            repoSystem.resolveDependencies( session, node, resolutionFilter );
+        }
+        catch ( DependencyCollectionException e )
         {
-            resolutionErrorHandler.throwErrors( request, result );
+            throw new PluginResolutionException( plugin, e );
         }
         catch ( ArtifactResolutionException e )
         {
             throw new PluginResolutionException( plugin, e );
         }
 
-        List<Artifact> pluginArtifacts = new ArrayList<Artifact>( result.getArtifacts() );
-
-        listener.removeBannedDependencies( pluginArtifacts );
-
-        addPlexusUtils( pluginArtifacts, plugin, request );
-
-        return pluginArtifacts;
+        return node;
     }
 
-    // backward-compatibility with Maven 2.x
-    private void addPlexusUtils( List<Artifact> pluginArtifacts, Plugin plugin, RepositoryRequest repositoryRequest )
-        throws PluginResolutionException
+    class GraphLogger
+        implements DependencyVisitor
     {
-        for ( Artifact artifact : pluginArtifacts )
+
+        private String indent = "";
+
+        public boolean visitEnter( DependencyNode node )
         {
-            if ( "org.codehaus.plexus:plexus-utils:jar".equals( artifact.getDependencyConflictId() ) )
+            StringBuilder buffer = new StringBuilder( 128 );
+            buffer.append( indent );
+            org.sonatype.aether.graph.Dependency dep = node.getDependency();
+            if ( dep != null )
             {
-                return;
-            }
-        }
+                org.sonatype.aether.artifact.Artifact art = dep.getArtifact();
 
-        Artifact plexusUtils =
-            repositorySystem.createArtifact( "org.codehaus.plexus", "plexus-utils", "1.1", Artifact.SCOPE_RUNTIME,
-                                             "jar" );
-
-        ArtifactResolutionRequest request = new ArtifactResolutionRequest( repositoryRequest );
-        request.setArtifact( plexusUtils );
-        request.setResolveRoot( true );
-        request.setResolveTransitively( false );
+                buffer.append( art );
+                buffer.append( ':' ).append( dep.getScope() );
 
-        ArtifactResolutionResult result = repositorySystem.resolve( request );
-        try
-        {
-            resolutionErrorHandler.throwErrors( request, result );
+                if ( node.getPremanagedScope() != null && !node.getPremanagedScope().equals( dep.getScope() ) )
+                {
+                    buffer.append( " (scope managed from " ).append( node.getPremanagedScope() ).append( ")" );
+                }
+
+                if ( node.getPremanagedVersion() != null && !node.getPremanagedVersion().equals( art.getVersion() ) )
+                {
+                    buffer.append( " (version managed from " ).append( node.getPremanagedVersion() ).append( ")" );
+                }
+            }
+
+            logger.debug( buffer.toString() );
+            indent += "   ";
+            return true;
         }
-        catch ( ArtifactResolutionException e )
+
+        public boolean visitLeave( DependencyNode node )
         {
-            throw new PluginResolutionException( plugin, e );
+            indent = indent.substring( 0, indent.length() - 3 );
+            return true;
         }
 
-        pluginArtifacts.add( plexusUtils );
     }
 
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java Tue Aug 24 22:46:07 2010
@@ -22,8 +22,6 @@ package org.apache.maven.plugin.internal
 import java.util.Map;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
-import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
@@ -100,10 +98,9 @@ public class DefaultPluginManager
         PluginDescriptor pluginDescriptor;
         try
         {
-            RepositoryRequest repositoryRequest =
-                DefaultRepositoryRequest.getRepositoryRequest( session, session.getCurrentProject() );
-
-            pluginDescriptor = pluginManager.getPluginDescriptor( plugin, repositoryRequest );
+            pluginDescriptor =
+                pluginManager.getPluginDescriptor( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+                                                   session.getRepositorySession() );
 
             pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null );
         }
@@ -133,10 +130,9 @@ public class DefaultPluginManager
         PluginDescriptor pluginDescriptor;
         try
         {
-            RepositoryRequest repositoryRequest =
-                DefaultRepositoryRequest.getRepositoryRequest( session, session.getCurrentProject() );
-
-            pluginDescriptor = pluginManager.getPluginDescriptor( plugin, repositoryRequest );
+            pluginDescriptor =
+                pluginManager.getPluginDescriptor( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+                                                   session.getRepositorySession() );
 
             pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null );
         }
@@ -234,24 +230,24 @@ public class DefaultPluginManager
         InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
         PluginVersionNotFoundException
     {
-        RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
-        repositoryRequest.setLocalRepository( localRepository );
-        repositoryRequest.setRemoteRepositories( project.getPluginArtifactRepositories() );
-        repositoryRequest.setOffline( settings.isOffline() );
+        MavenSession session = legacySupport.getSession();
 
         if ( plugin.getVersion() == null )
         {
-            PluginVersionRequest versionRequest = new DefaultPluginVersionRequest( plugin, repositoryRequest );
+            PluginVersionRequest versionRequest =
+                new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
+                                                 project.getRemotePluginRepositories() );
             plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() );
         }
 
         try
         {
-            return pluginManager.getPluginDescriptor( plugin, repositoryRequest );
+            return pluginManager.getPluginDescriptor( plugin, project.getRemotePluginRepositories(),
+                                                      session.getRepositorySession() );
         }
         catch ( PluginResolutionException e )
         {
-            throw new PluginNotFoundException( plugin, repositoryRequest.getRemoteRepositories() );
+            throw new PluginNotFoundException( plugin, project.getPluginArtifactRepositories() );
         }
         catch ( PluginDescriptorParsingException e )
         {

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,87 @@
+package org.apache.maven.plugin.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.sonatype.aether.RepositoryException;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.collection.DependencyGraphTransformationContext;
+import org.sonatype.aether.collection.DependencyGraphTransformer;
+import org.sonatype.aether.graph.Dependency;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+import org.sonatype.aether.util.artifact.JavaScopes;
+import org.sonatype.aether.util.graph.DefaultDependencyNode;
+
+/**
+ * Injects plexus-utils:1.1 into a plugin's class path if it doesn't already declare a dependency on plexus-utils. This
+ * is another legacy bit to provide backward-compat with Maven 2.x.
+ * 
+ * @author Benjamin Bentmann
+ */
+class PlexusUtilsInjector
+    implements DependencyGraphTransformer
+{
+
+    private static final String GID = "org.codehaus.plexus";
+
+    private static final String AID = "plexus-utils";
+
+    private static final String VER = "1.1";
+
+    private static final String EXT = "jar";
+
+    public DependencyNode transformGraph( DependencyNode node, DependencyGraphTransformationContext context )
+        throws RepositoryException
+    {
+        if ( findPlexusUtils( node ) == null )
+        {
+            Artifact pu = new DefaultArtifact( GID, AID, null, EXT, VER );
+            DefaultDependencyNode child = new DefaultDependencyNode( new Dependency( pu, JavaScopes.RUNTIME ) );
+            child.setRepositories( node.getRepositories() );
+            child.setRequestContext( node.getRequestContext() );
+            node.getChildren().add( child );
+        }
+
+        return node;
+    }
+
+    private DependencyNode findPlexusUtils( DependencyNode node )
+    {
+        Artifact artifact = node.getDependency().getArtifact();
+
+        if ( AID.equals( artifact.getArtifactId() ) && GID.equals( artifact.getGroupId() )
+            && EXT.equals( artifact.getExtension() ) && "".equals( artifact.getClassifier() ) )
+        {
+            return node;
+        }
+
+        for ( DependencyNode child : node.getChildren() )
+        {
+            DependencyNode result = findPlexusUtils( child );
+            if ( result != null )
+            {
+                return result;
+            }
+        }
+
+        return null;
+    }
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java Tue Aug 24 22:46:07 2010
@@ -21,11 +21,13 @@ package org.apache.maven.plugin.internal
 
 import java.util.List;
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.PluginResolutionException;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.repository.RemoteRepository;
 
 /**
  * Assists in resolving the dependencies of a plugin. <strong>Warning:</strong> This is an internal utility interface
@@ -40,29 +42,30 @@ public interface PluginDependenciesResol
 
     /**
      * Resolves the main artifact of the specified plugin.
-     *
+     * 
      * @param plugin The plugin for which to resolve the main artifact, must not be {@code null}.
-     * @param request A prepopulated resolution request that will be completed and used for the resolution, must not be
-     *            {@code null}.
+     * @param repositories The plugin repositories to use for resolving the plugin's main artifact, must not be {@code
+     *            null}.
+     * @param session The repository session to use for resolving the plugin's main artifact, must not be {@code null}.
      * @return The resolved plugin artifact, never {@code null}.
      * @throws PluginResolutionException If the plugin artifact could not be resolved.
      */
-    Artifact resolve( Plugin plugin, ArtifactResolutionRequest request )
+    public Artifact resolve( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
         throws PluginResolutionException;
 
     /**
      * Resolves the runtime dependencies of the specified plugin.
-     *
+     * 
      * @param plugin The plugin for which to resolve the dependencies, must not be {@code null}.
      * @param pluginArtifact The plugin's main artifact, may be {@code null}.
-     * @param request A prepopulated resolution request that will be completed and used for the resolution, must not be
-     *            {@code null}.
-     * @param dependencyFilter A filter to exclude artifacts from resolution, may be {@code null}.
-     * @return The list of artifacts denoting the resolved plugin class path, never {@code null}.
+     * @param dependencyFilter A filter to exclude artifacts from resolution (but not collection), may be {@code null}.
+     * @param repositories The plugin repositories to use for resolving the plugin artifacts, must not be {@code null}.
+     * @param session The repository session to use for resolving the plugin artifacts, must not be {@code null}.
+     * @return The dependency tree denoting the resolved plugin class path, never {@code null}.
      * @throws PluginResolutionException If any dependency could not be resolved.
      */
-    List<Artifact> resolve( Plugin plugin, Artifact pluginArtifact, ArtifactResolutionRequest request,
-                            ArtifactFilter dependencyFilter )
+    DependencyNode resolve( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+                            List<RemoteRepository> repositories, RepositorySystemSession session )
         throws PluginResolutionException;
 
 }

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,109 @@
+package org.apache.maven.plugin.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.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.collection.DependencyCollectionContext;
+import org.sonatype.aether.collection.DependencySelector;
+import org.sonatype.aether.graph.Dependency;
+
+/**
+ * Assists in detecting wagon providers brought into the plugin class path via legacy Maven core artifacts (e.g.
+ * maven-core:2.0.6) and excluding them. A plugin should be able to explicitly declare dependencies on specific wagons
+ * for its use. However, the (old) wagons pulled in transitively via legacy Maven core artifacts are usually not
+ * intended as dependencies and more importantly screw up artifact resolution because they would get preferred over the
+ * core wagon versions. This is a hack to provide backward-compat with Maven 2 (MNG-4528, MNG-4561).
+ * 
+ * @author Benjamin Bentmann
+ */
+class WagonExcluder
+    implements DependencySelector
+{
+
+    private final boolean coreArtifact;
+
+    public WagonExcluder()
+    {
+        this( false );
+    }
+
+    private WagonExcluder( boolean coreArtifact )
+    {
+        this.coreArtifact = coreArtifact;
+    }
+
+    public boolean selectDependency( Dependency dependency )
+    {
+        return !coreArtifact || !isWagonProvider( dependency.getArtifact() );
+    }
+
+    public DependencySelector deriveChildSelector( DependencyCollectionContext context )
+    {
+        if ( coreArtifact || !isLegacyCoreArtifact( context.getDependency().getArtifact() ) )
+        {
+            return this;
+        }
+        else
+        {
+            return new WagonExcluder( true );
+        }
+    }
+
+    private boolean isLegacyCoreArtifact( Artifact artifact )
+    {
+        String version = artifact.getVersion();
+        return version != null && version.startsWith( "2." ) && artifact.getArtifactId().startsWith( "maven-" )
+            && artifact.getGroupId().equals( "org.apache.maven" );
+    }
+
+    private boolean isWagonProvider( Artifact artifact )
+    {
+        if ( "org.apache.maven.wagon".equals( artifact.getGroupId() ) )
+        {
+            return artifact.getArtifactId().startsWith( "wagon-" );
+        }
+        return false;
+    }
+
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( obj == this )
+        {
+            return true;
+        }
+        else if ( obj == null || !getClass().equals( obj.getClass() ) )
+        {
+            return false;
+        }
+
+        WagonExcluder that = (WagonExcluder) obj;
+        return coreArtifact == that.coreArtifact;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int hash = getClass().hashCode();
+        hash = hash * 31 + ( coreArtifact ? 1 : 0 );
+        return hash;
+    }
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java Tue Aug 24 22:46:07 2010
@@ -19,17 +19,14 @@ package org.apache.maven.plugin.prefix;
  * under the License.
  */
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
-import org.apache.maven.artifact.repository.RepositoryCache;
-import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.repository.ArtifactTransferListener;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.repository.RemoteRepository;
 
 /**
  * Collects settings required to resolve a plugin prefix.
@@ -43,34 +40,25 @@ public class DefaultPluginPrefixRequest
 
     private String prefix;
 
-    private List<String> pluginGroups;
+    private List<String> pluginGroups = Collections.emptyList();
 
     private Model pom;
 
-    private RepositoryRequest repositoryRequest;
+    private List<RemoteRepository> repositories = Collections.emptyList();
+
+    private RepositorySystemSession session;
 
     /**
      * Creates an empty request.
      */
     public DefaultPluginPrefixRequest()
     {
-        repositoryRequest = new DefaultRepositoryRequest();
-    }
-
-    /**
-     * Creates a request by copying settings from the specified repository request.
-     * 
-     * @param repositoryRequest The repository request to copy from, must not be {@code null}.
-     */
-    public DefaultPluginPrefixRequest( RepositoryRequest repositoryRequest )
-    {
-        this.repositoryRequest = new DefaultRepositoryRequest( repositoryRequest );
     }
 
     /**
      * Creates a request for the specified plugin prefix and build session. The provided build session will be used to
-     * configure repository settings. If the session has a current project, its plugin artifact repositories and model
-     * will be used as well.
+     * configure repository settings. If the session has a current project, its plugin repositories and model will be
+     * used as well.
      * 
      * @param prefix The plugin prefix to resolve, must not be {@code null}.
      * @param session The build session from which to derive further settings, must not be {@code null}.
@@ -79,18 +67,12 @@ public class DefaultPluginPrefixRequest
     {
         setPrefix( prefix );
 
-        this.repositoryRequest = new DefaultRepositoryRequest();
-
-        setCache( session.getRepositoryCache() );
-        setLocalRepository( session.getLocalRepository() );
-        setOffline( session.isOffline() );
-        setForceUpdate( session.getRequest().isUpdateSnapshots() );
-        setTransferListener( session.getRequest().getTransferListener() );
+        setRepositorySession( session.getRepositorySession() );
 
         MavenProject project = session.getCurrentProject();
         if ( project != null )
         {
-            setRemoteRepositories( project.getPluginArtifactRepositories() );
+            setRepositories( project.getRemotePluginRepositories() );
             setPom( project.getModel() );
         }
 
@@ -111,17 +93,19 @@ public class DefaultPluginPrefixRequest
 
     public List<String> getPluginGroups()
     {
-        if ( pluginGroups == null )
-        {
-            pluginGroups = new ArrayList<String>();
-        }
-
         return pluginGroups;
     }
 
     public DefaultPluginPrefixRequest setPluginGroups( List<String> pluginGroups )
     {
-        this.pluginGroups = pluginGroups;
+        if ( pluginGroups != null )
+        {
+            this.pluginGroups = pluginGroups;
+        }
+        else
+        {
+            this.pluginGroups = Collections.emptyList();
+        }
 
         return this;
     }
@@ -138,74 +122,33 @@ public class DefaultPluginPrefixRequest
         return this;
     }
 
-    public RepositoryCache getCache()
+    public List<RemoteRepository> getRepositories()
     {
-        return repositoryRequest.getCache();
-    }
-
-    public DefaultPluginPrefixRequest setCache( RepositoryCache cache )
-    {
-        repositoryRequest.setCache( cache );
-
-        return this;
+        return repositories;
     }
 
-    public ArtifactRepository getLocalRepository()
+    public DefaultPluginPrefixRequest setRepositories( List<RemoteRepository> repositories )
     {
-        return repositoryRequest.getLocalRepository();
-    }
-
-    public DefaultPluginPrefixRequest setLocalRepository( ArtifactRepository localRepository )
-    {
-        repositoryRequest.setLocalRepository( localRepository );
-
-        return this;
-    }
-
-    public List<ArtifactRepository> getRemoteRepositories()
-    {
-        return repositoryRequest.getRemoteRepositories();
-    }
-
-    public DefaultPluginPrefixRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
-    {
-        repositoryRequest.setRemoteRepositories( remoteRepositories );
-
-        return this;
-    }
-
-    public boolean isOffline()
-    {
-        return repositoryRequest.isOffline();
-    }
-
-    public DefaultPluginPrefixRequest setOffline( boolean offline )
-    {
-        repositoryRequest.setOffline( offline );
-
-        return this;
-    }
-
-    public boolean isForceUpdate()
-    {
-        return repositoryRequest.isForceUpdate();
-    }
-
-    public DefaultPluginPrefixRequest setForceUpdate( boolean forceUpdate )
-    {
-        repositoryRequest.setForceUpdate( forceUpdate );
+        if ( repositories != null )
+        {
+            this.repositories = repositories;
+        }
+        else
+        {
+            this.repositories = Collections.emptyList();
+        }
 
         return this;
     }
 
-    public ArtifactTransferListener getTransferListener()
+    public RepositorySystemSession getRepositorySession()
     {
-        return repositoryRequest.getTransferListener();
+        return session;
     }
 
-    public DefaultPluginPrefixRequest setTransferListener( ArtifactTransferListener transferListener )
+    public DefaultPluginPrefixRequest setRepositorySession( RepositorySystemSession session )
     {
-        repositoryRequest.setTransferListener( transferListener );
+        this.session = session;
 
         return this;
     }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java Tue Aug 24 22:46:07 2010
@@ -21,29 +21,21 @@ package org.apache.maven.plugin.prefix;
 
 import java.util.List;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.sonatype.aether.repository.LocalRepository;
+import org.sonatype.aether.repository.RemoteRepository;
 
 public class NoPluginFoundForPrefixException
     extends Exception
 {
-    private String prefix;
-    
-    private ArtifactRepository localRepository;
-    
-    private List<ArtifactRepository> remoteRepositories;
-    
-    public NoPluginFoundForPrefixException( String prefix, List<String> pluginGroups,
-                                            ArtifactRepository localRepository,
-                                            List<ArtifactRepository> remoteRepositories )
+
+    public NoPluginFoundForPrefixException( String prefix, List<String> pluginGroups, LocalRepository localRepository,
+                                            List<RemoteRepository> remoteRepositories )
     {
         super( "No plugin found for prefix '" + prefix + "' in the current project and in the plugin groups "
             + pluginGroups + " available from the repositories " + format( localRepository, remoteRepositories ) );
-        this.prefix = prefix;
-        this.localRepository = localRepository;
-        this.remoteRepositories = remoteRepositories;
     }
 
-    private static String format( ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+    private static String format( LocalRepository localRepository, List<RemoteRepository> remoteRepositories )
     {
         String repos = "[";
 
@@ -54,7 +46,7 @@ public class NoPluginFoundForPrefixExcep
 
         if ( remoteRepositories != null && !remoteRepositories.isEmpty() )
         {
-            for ( ArtifactRepository repository : remoteRepositories )
+            for ( RemoteRepository repository : remoteRepositories )
             {
                 repos += ", ";
 

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java Tue Aug 24 22:46:07 2010
@@ -21,11 +21,9 @@ package org.apache.maven.plugin.prefix;
 
 import java.util.List;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.RepositoryCache;
-import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.model.Model;
-import org.apache.maven.repository.ArtifactTransferListener;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.repository.RemoteRepository;
 
 /**
  * Collects settings required to resolve a plugin prefix.
@@ -34,7 +32,6 @@ import org.apache.maven.repository.Artif
  * @author Benjamin Bentmann
  */
 public interface PluginPrefixRequest
-    extends RepositoryRequest
 {
 
     /**
@@ -85,79 +82,34 @@ public interface PluginPrefixRequest
     PluginPrefixRequest setPom( Model pom );
 
     /**
-     * Indicates whether network access to remote repositories has been disabled.
-     * 
-     * @return {@code true} if remote access has been disabled, {@code false} otherwise.
-     */
-    boolean isOffline();
-
-    /**
-     * Enables/disables network access to remote repositories.
-     * 
-     * @param offline {@code true} to disable remote access, {@code false} to allow network access.
-     * @return This request, never {@code null}.
-     */
-    PluginPrefixRequest setOffline( boolean offline );
-
-    /**
-     * Gets the local repository to use.
-     * 
-     * @return The local repository to use or {@code null} if not set.
-     */
-    ArtifactRepository getLocalRepository();
-
-    /**
-     * Sets the local repository to use.
-     * 
-     * @param localRepository The local repository to use.
-     * @return This request, never {@code null}.
-     */
-    PluginPrefixRequest setLocalRepository( ArtifactRepository localRepository );
-
-    /**
      * Gets the remote repositories to use.
      * 
      * @return The remote repositories to use, never {@code null}.
      */
-    List<ArtifactRepository> getRemoteRepositories();
+    List<RemoteRepository> getRepositories();
 
     /**
      * Sets the remote repositories to use. <em>Note:</em> When creating a request from a project, be sure to use the
-     * plugin artifact repositories and not the regular artifact repositories.
-     * 
-     * @param remoteRepositories The remote repositories to use.
-     * @return This request, never {@code null}.
-     */
-    PluginPrefixRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories );
-
-    /**
-     * Gets the repository cache to use.
-     * 
-     * @return The repository cache to use or {@code null} if none.
-     */
-    RepositoryCache getCache();
-
-    /**
-     * Sets the repository cache to use.
+     * plugin repositories and not the regular project repositories.
      * 
-     * @param cache The repository cache to use, may be {@code null}.
+     * @param repositories The remote repositories to use.
      * @return This request, never {@code null}.
      */
-    PluginPrefixRequest setCache( RepositoryCache cache );
+    PluginPrefixRequest setRepositories( List<RemoteRepository> repositories );
 
     /**
-     * Gets the listener to notify of transfer events.
+     * Gets the session to use for repository access.
      * 
-     * @return The transfer listener or {@code null} if none.
+     * @return The repository session or {@code null} if not set.
      */
-    ArtifactTransferListener getTransferListener();
+    RepositorySystemSession getRepositorySession();
 
     /**
-     * Sets the listener to notify of transfer events.
+     * Sets the session to use for repository access.
      * 
-     * @param transferListener The transfer listener to notify, may be {@code null}.
+     * @param repositorySession The repository session to use.
      * @return This request, never {@code null}.
      */
-    PluginPrefixRequest setTransferListener( ArtifactTransferListener transferListener );
+    PluginPrefixRequest setRepositorySession( RepositorySystemSession repositorySession );
 
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java Tue Aug 24 22:46:07 2010
@@ -1,5 +1,7 @@
 package org.apache.maven.plugin.prefix;
 
+import org.sonatype.aether.repository.ArtifactRepository;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -19,8 +21,6 @@ package org.apache.maven.plugin.prefix;
  * under the License.
  */
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
 /**
  * Describes the result of a plugin prefix resolution request.
  * 

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java Tue Aug 24 22:46:07 2010
@@ -23,11 +23,9 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.io.MetadataReader;
 import org.apache.maven.model.Build;
@@ -38,12 +36,18 @@ import org.apache.maven.plugin.prefix.No
 import org.apache.maven.plugin.prefix.PluginPrefixRequest;
 import org.apache.maven.plugin.prefix.PluginPrefixResolver;
 import org.apache.maven.plugin.prefix.PluginPrefixResult;
-import org.apache.maven.repository.RepositorySystem;
-import org.apache.maven.repository.ArtifactDoesNotExistException;
-import org.apache.maven.repository.ArtifactTransferFailedException;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.repository.ArtifactRepository;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.repository.RepositoryPolicy;
+import org.sonatype.aether.resolution.MetadataRequest;
+import org.sonatype.aether.resolution.MetadataResult;
+import org.sonatype.aether.transfer.MetadataNotFoundException;
+import org.sonatype.aether.util.DefaultRepositorySystemSession;
+import org.sonatype.aether.util.metadata.DefaultMetadata;
 
 /**
  * Resolves a plugin prefix.
@@ -56,6 +60,8 @@ public class DefaultPluginPrefixResolver
     implements PluginPrefixResolver
 {
 
+    private static final String REPOSITORY_CONTEXT = "plugin";
+
     @Requirement
     private Logger logger;
 
@@ -82,8 +88,8 @@ public class DefaultPluginPrefixResolver
             if ( result == null )
             {
                 throw new NoPluginFoundForPrefixException( request.getPrefix(), request.getPluginGroups(),
-                                                           request.getLocalRepository(),
-                                                           request.getRemoteRepositories() );
+                                                           request.getRepositorySession().getLocalRepository(),
+                                                           request.getRepositories() );
             }
             else if ( logger.isDebugEnabled() )
             {
@@ -126,7 +132,8 @@ public class DefaultPluginPrefixResolver
         {
             try
             {
-                PluginDescriptor pluginDescriptor = pluginManager.loadPlugin( plugin, request );
+                PluginDescriptor pluginDescriptor =
+                    pluginManager.loadPlugin( plugin, request.getRepositories(), request.getRepositorySession() );
 
                 if ( request.getPrefix().equals( pluginDescriptor.getGoalPrefix() ) )
                 {
@@ -152,155 +159,105 @@ public class DefaultPluginPrefixResolver
 
     private PluginPrefixResult resolveFromRepository( PluginPrefixRequest request )
     {
-        ArtifactRepository localRepository = request.getLocalRepository();
+        List<MetadataRequest> requests = new ArrayList<MetadataRequest>();
 
-        // Process all plugin groups in the local repository first to see if we get a hit. A developer may have been
-        // developing a plugin locally and installing.
-        //
         for ( String pluginGroup : request.getPluginGroups() )
         {
-            String localPath = getLocalMetadataPath( pluginGroup, localRepository );
-
-            File groupMetadataFile = new File( localRepository.getBasedir(), localPath );
+            org.sonatype.aether.metadata.Metadata metadata =
+                new DefaultMetadata( pluginGroup, "maven-metadata.xml", DefaultMetadata.Nature.RELEASE_OR_SNAPSHOT );
 
-            PluginPrefixResult result =
-                resolveFromRepository( request, pluginGroup, groupMetadataFile, localRepository );
+            requests.add( new MetadataRequest( metadata, null, REPOSITORY_CONTEXT ) );
 
-            if ( result != null )
+            for ( RemoteRepository repository : request.getRepositories() )
             {
-                return result;
+                requests.add( new MetadataRequest( metadata, repository, REPOSITORY_CONTEXT ) );
             }
         }
 
-        Map<String, List<ArtifactRepository>> recheck = new HashMap<String, List<ArtifactRepository>>();
+        // initial try, use locally cached metadata
 
-        // Process all the remote repositories.
-        //
-        for ( String pluginGroup : request.getPluginGroups() )
-        {
-            for ( ArtifactRepository repository : request.getRemoteRepositories() )
-            {
-                if ( !isEnabled( repository ) )
-                {
-                    logger.debug( "Skipped plugin prefix lookup from disabled repository " + repository.getId() );
-                    continue;
-                }
+        List<MetadataResult> results = repositorySystem.resolveMetadata( request.getRepositorySession(), requests );
+        requests.clear();
 
-                String localPath = getLocalMetadataPath( pluginGroup, repository );
+        PluginPrefixResult result = processResults( request, results, requests );
 
-                File groupMetadataFile = new File( localRepository.getBasedir(), localPath );
+        if ( result != null )
+        {
+            return result;
+        }
 
-                if ( !request.isOffline() && ( !groupMetadataFile.exists() || request.isForceUpdate() ) )
-                {
-                    String remotePath = getRemoteMetadataPath( pluginGroup, repository );
+        // second try, refetch all (possibly outdated) metadata that wasn't updated in the first attempt
 
-                    try
-                    {
-                        repositorySystem.retrieve( repository, groupMetadataFile, remotePath,
-                                                   request.getTransferListener() );
-                    }
-                    catch ( ArtifactTransferFailedException e )
-                    {
-                        if ( logger.isDebugEnabled() )
-                        {
-                            logger.warn( "Failed to retrieve " + remotePath + " from " + repository.getId() + ": "
-                                + e.getMessage(), e );
-                        }
-                        else
-                        {
-                            logger.warn( "Failed to retrieve " + remotePath + " from " + repository.getId() + ": "
-                                + e.getMessage() );
-                        }
-                    }
-                    catch ( ArtifactDoesNotExistException e )
-                    {
-                        continue;
-                    }
-                }
-                else if ( !request.isOffline() && !request.isForceUpdate() )
-                {
-                    List<ArtifactRepository> repos = recheck.get( pluginGroup );
-                    if ( repos == null )
-                    {
-                        repos = new ArrayList<ArtifactRepository>();
-                        recheck.put( pluginGroup, repos );
-                    }
-                    repos.add( repository );
-                }
+        if ( !request.getRepositorySession().isOffline() && !requests.isEmpty() )
+        {
+            DefaultRepositorySystemSession session =
+                new DefaultRepositorySystemSession( request.getRepositorySession() );
+            session.setUpdatePolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS );
 
-                PluginPrefixResult result = resolveFromRepository( request, pluginGroup, groupMetadataFile,
-                                                                   repository );
+            results = repositorySystem.resolveMetadata( session, requests );
 
-                if ( result != null )
-                {
-                    return result;
-                }
-            }
+            return processResults( request, results, null );
         }
 
-        // Retry the remote repositories for which we previously only consulted the possibly outdated local cache.
-        //
-        for ( String pluginGroup : request.getPluginGroups() )
-        {
-            List<ArtifactRepository> repos = recheck.get( pluginGroup );
-            if ( repos == null )
-            {
-                continue;
-            }
+        return null;
+    }
 
-            for ( ArtifactRepository repository : repos )
+    private PluginPrefixResult processResults( PluginPrefixRequest request, List<MetadataResult> results,
+                                               List<MetadataRequest> requests )
+    {
+        for ( MetadataResult res : results )
+        {
+            if ( res.getException() != null )
             {
-                String localPath = getLocalMetadataPath( pluginGroup, repository );
-
-                File groupMetadataFile = new File( localRepository.getBasedir(), localPath );
-
-                String remotePath = getRemoteMetadataPath( pluginGroup, repository );
-
-                try
+                if ( res.getException() instanceof MetadataNotFoundException )
                 {
-                    repositorySystem.retrieve( repository, groupMetadataFile, remotePath,
-                                               request.getTransferListener() );
+                    logger.debug( "Could not find " + res.getRequest().getMetadata() + " in "
+                        + res.getRequest().getRepository() );
                 }
-                catch ( ArtifactTransferFailedException e )
+                else if ( logger.isDebugEnabled() )
                 {
-                    if ( logger.isDebugEnabled() )
-                    {
-                        logger.warn( "Failed to retrieve " + remotePath + " from " + repository.getId() + ": "
-                            + e.getMessage(), e );
-                    }
-                    else
-                    {
-                        logger.warn( "Failed to retrieve " + remotePath + " from " + repository.getId() + ": "
-                            + e.getMessage() );
-                    }
+                    logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+                        + res.getRequest().getRepository() + ": " + res.getException().getMessage(), res.getException() );
+                }
+                else
+                {
+                    logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+                        + res.getRequest().getRepository() + ": " + res.getException().getMessage() );
                 }
-                catch ( ArtifactDoesNotExistException e )
+            }
+
+            org.sonatype.aether.metadata.Metadata metadata = res.getMetadata();
+
+            if ( metadata != null )
+            {
+                ArtifactRepository repository = res.getRequest().getRepository();
+                if ( repository == null )
                 {
-                    continue;
+                    repository = request.getRepositorySession().getLocalRepository();
                 }
 
-                PluginPrefixResult result = resolveFromRepository( request, pluginGroup, groupMetadataFile,
-                                                                   repository );
+                PluginPrefixResult result =
+                    resolveFromRepository( request, metadata.getGroupId(), metadata.getFile(), repository );
 
                 if ( result != null )
                 {
                     return result;
                 }
             }
+
+            if ( requests != null && !res.isUpdated() )
+            {
+                requests.add( res.getRequest() );
+            }
         }
 
         return null;
     }
 
-    private boolean isEnabled( ArtifactRepository repository )
-    {
-        return repository.getReleases().isEnabled() || repository.getSnapshots().isEnabled();
-    }
-
     private PluginPrefixResult resolveFromRepository( PluginPrefixRequest request, String pluginGroup,
                                                       File metadataFile, ArtifactRepository repository )
     {
-        if ( metadataFile.isFile() )
+        if ( metadataFile != null && metadataFile.isFile() )
         {
             try
             {
@@ -337,14 +294,4 @@ public class DefaultPluginPrefixResolver
         return null;
     }
 
-    private String getLocalMetadataPath( String groupId, ArtifactRepository repository )
-    {
-        return groupId.replace( '.', '/' ) + "/" + "maven-metadata-" + repository.getId() + ".xml";
-    }
-
-    private String getRemoteMetadataPath( String groupId, ArtifactRepository repository )
-    {
-        return groupId.replace( '.', '/' ) + "/" + "maven-metadata.xml";
-    }
-
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java Tue Aug 24 22:46:07 2010
@@ -19,9 +19,9 @@ package org.apache.maven.plugin.prefix.i
  * under the License.
  */
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.prefix.PluginPrefixResult;
+import org.sonatype.aether.repository.ArtifactRepository;
 
 /**
  * Describes the result of a plugin prefix resolution request.

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java Tue Aug 24 22:46:07 2010
@@ -19,17 +19,15 @@ package org.apache.maven.plugin.version;
  * under the License.
  */
 
+import java.util.Collections;
 import java.util.List;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
-import org.apache.maven.artifact.repository.RepositoryCache;
-import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.repository.ArtifactTransferListener;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.repository.RemoteRepository;
 
 /**
  * Collects settings required to resolve the version for a plugin.
@@ -47,63 +45,53 @@ public class DefaultPluginVersionRequest
 
     private Model pom;
 
-    private RepositoryRequest repositoryRequest;
+    private List<RemoteRepository> repositories = Collections.emptyList();
+
+    private RepositorySystemSession session;
 
     /**
      * Creates an empty request.
      */
     public DefaultPluginVersionRequest()
     {
-        repositoryRequest = new DefaultRepositoryRequest();
     }
 
     /**
-     * Creates a request by copying settings from the specified repository request.
+     * Creates a request for the specified plugin by copying settings from the specified build session. If the session
+     * has a current project, its plugin repositories will be used as well.
      * 
+     * @param plugin The plugin for which to resolve a version, must not be {@code null}.
      * @param repositoryRequest The repository request to copy from, must not be {@code null}.
      */
-    public DefaultPluginVersionRequest( RepositoryRequest repositoryRequest )
+    public DefaultPluginVersionRequest( Plugin plugin, MavenSession session )
     {
-        this.repositoryRequest = new DefaultRepositoryRequest( repositoryRequest );
-    }
+        setGroupId( plugin.getGroupId() );
+        setArtifactId( plugin.getArtifactId() );
 
-    /**
-     * Creates a request for the specified plugin by copying settings from the specified repository request.
-     * 
-     * @param The plugin for which to resolve a version, must not be {@code null}.
-     * @param repositoryRequest The repository request to copy from, must not be {@code null}.
-     */
-    public DefaultPluginVersionRequest( Plugin plugin, RepositoryRequest repositoryRequest )
-    {
-        this.groupId = plugin.getGroupId();
-        this.artifactId = plugin.getArtifactId();
-        this.repositoryRequest = new DefaultRepositoryRequest( repositoryRequest );
+        setRepositorySession( session.getRepositorySession() );
+
+        MavenProject project = session.getCurrentProject();
+        if ( project != null )
+        {
+            setRepositories( project.getRemotePluginRepositories() );
+        }
     }
 
     /**
-     * Creates a request for the specified plugin by copying settings from the specified build session. If the session
-     * has a current project, its plugin artifact repositories will be used as well.
+     * Creates a request for the specified plugin using the given repository session and plugin repositories.
      * 
-     * @param The plugin for which to resolve a version, must not be {@code null}.
-     * @param repositoryRequest The repository request to copy from, must not be {@code null}.
+     * @param plugin The plugin for which to resolve a version, must not be {@code null}.
+     * @param session The repository session to use, must not be {@code null}.
+     * @param repositories The plugin repositories to query, may be {@code null}.
      */
-    public DefaultPluginVersionRequest( Plugin plugin, MavenSession session )
+    public DefaultPluginVersionRequest( Plugin plugin, RepositorySystemSession session, List<RemoteRepository> repositories )
     {
-        this.groupId = plugin.getGroupId();
-        this.artifactId = plugin.getArtifactId();
-        this.repositoryRequest = new DefaultRepositoryRequest();
-
-        setCache( session.getRepositoryCache() );
-        setLocalRepository( session.getLocalRepository() );
-        setOffline( session.isOffline() );
-        setForceUpdate( session.getRequest().isUpdateSnapshots() );
-        setTransferListener( session.getRequest().getTransferListener() );
+        setGroupId( plugin.getGroupId() );
+        setArtifactId( plugin.getArtifactId() );
 
-        MavenProject project = session.getCurrentProject();
-        if ( project != null )
-        {
-            setRemoteRepositories( project.getPluginArtifactRepositories() );
-        }
+        setRepositorySession( session );
+
+        setRepositories( repositories );
     }
 
     public String getGroupId()
@@ -142,74 +130,33 @@ public class DefaultPluginVersionRequest
         return this;
     }
 
-    public RepositoryCache getCache()
-    {
-        return repositoryRequest.getCache();
-    }
-
-    public DefaultPluginVersionRequest setCache( RepositoryCache cache )
-    {
-        repositoryRequest.setCache( cache );
-
-        return this;
-    }
-
-    public ArtifactRepository getLocalRepository()
-    {
-        return repositoryRequest.getLocalRepository();
-    }
-
-    public DefaultPluginVersionRequest setLocalRepository( ArtifactRepository localRepository )
+    public List<RemoteRepository> getRepositories()
     {
-        repositoryRequest.setLocalRepository( localRepository );
-
-        return this;
+        return repositories;
     }
 
-    public List<ArtifactRepository> getRemoteRepositories()
+    public DefaultPluginVersionRequest setRepositories( List<RemoteRepository> repositories )
     {
-        return repositoryRequest.getRemoteRepositories();
-    }
-
-    public DefaultPluginVersionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
-    {
-        repositoryRequest.setRemoteRepositories( remoteRepositories );
-
-        return this;
-    }
-
-    public boolean isOffline()
-    {
-        return repositoryRequest.isOffline();
-    }
-
-    public DefaultPluginVersionRequest setOffline( boolean offline )
-    {
-        repositoryRequest.setOffline( offline );
-
-        return this;
-    }
-
-    public boolean isForceUpdate()
-    {
-        return repositoryRequest.isForceUpdate();
-    }
-
-    public DefaultPluginVersionRequest setForceUpdate( boolean forceUpdate )
-    {
-        repositoryRequest.setForceUpdate( forceUpdate );
+        if ( repositories != null )
+        {
+            this.repositories = repositories;
+        }
+        else
+        {
+            this.repositories = Collections.emptyList();
+        }
 
         return this;
     }
 
-    public ArtifactTransferListener getTransferListener()
+    public RepositorySystemSession getRepositorySession()
     {
-        return repositoryRequest.getTransferListener();
+        return session;
     }
 
-    public DefaultPluginVersionRequest setTransferListener( ArtifactTransferListener transferListener )
+    public DefaultPluginVersionRequest setRepositorySession( RepositorySystemSession session )
     {
-        repositoryRequest.setTransferListener( transferListener );
+        this.session = session;
 
         return this;
     }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java Tue Aug 24 22:46:07 2010
@@ -21,11 +21,9 @@ package org.apache.maven.plugin.version;
 
 import java.util.List;
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.RepositoryCache;
-import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.model.Model;
-import org.apache.maven.repository.ArtifactTransferListener;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.repository.RemoteRepository;
 
 /**
  * Collects settings required to resolve the version for a plugin.
@@ -34,7 +32,6 @@ import org.apache.maven.repository.Artif
  * @author Benjamin Bentmann
  */
 public interface PluginVersionRequest
-    extends RepositoryRequest
 {
 
     /**
@@ -85,79 +82,34 @@ public interface PluginVersionRequest
     PluginVersionRequest setPom( Model pom );
 
     /**
-     * Indicates whether network access to remote repositories has been disabled.
-     * 
-     * @return {@code true} if remote access has been disabled, {@code false} otherwise.
-     */
-    boolean isOffline();
-
-    /**
-     * Enables/disables network access to remote repositories.
-     * 
-     * @param offline {@code true} to disable remote access, {@code false} to allow network access.
-     * @return This request, never {@code null}.
-     */
-    PluginVersionRequest setOffline( boolean offline );
-
-    /**
-     * Gets the local repository to use.
-     * 
-     * @return The local repository to use or {@code null} if not set.
-     */
-    ArtifactRepository getLocalRepository();
-
-    /**
-     * Sets the local repository to use.
-     * 
-     * @param localRepository The local repository to use.
-     * @return This request, never {@code null}.
-     */
-    PluginVersionRequest setLocalRepository( ArtifactRepository localRepository );
-
-    /**
      * Gets the remote repositories to use.
      * 
      * @return The remote repositories to use, never {@code null}.
      */
-    List<ArtifactRepository> getRemoteRepositories();
+    List<RemoteRepository> getRepositories();
 
     /**
      * Sets the remote repositories to use. <em>Note:</em> When creating a request from a project, be sure to use the
-     * plugin artifact repositories and not the regular artifact repositories.
-     * 
-     * @param remoteRepositories The remote repositories to use.
-     * @return This request, never {@code null}.
-     */
-    PluginVersionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories );
-
-    /**
-     * Gets the repository cache to use.
-     * 
-     * @return The repository cache to use or {@code null} if none.
-     */
-    RepositoryCache getCache();
-
-    /**
-     * Sets the repository cache to use.
+     * plugin repositories and not the regular project repositories.
      * 
-     * @param cache The repository cache to use, may be {@code null}.
+     * @param repositories The remote repositories to use.
      * @return This request, never {@code null}.
      */
-    PluginVersionRequest setCache( RepositoryCache cache );
+    PluginVersionRequest setRepositories( List<RemoteRepository> repositories );
 
     /**
-     * Gets the listener to notify of transfer events.
+     * Gets the session to use for repository access.
      * 
-     * @return The transfer listener or {@code null} if none.
+     * @return The repository session or {@code null} if not set.
      */
-    ArtifactTransferListener getTransferListener();
+    RepositorySystemSession getRepositorySession();
 
     /**
-     * Sets the listener to notify of transfer events.
+     * Sets the session to use for repository access.
      * 
-     * @param transferListener The transfer listener to notify, may be {@code null}.
+     * @param repositorySession The repository session to use.
      * @return This request, never {@code null}.
      */
-    PluginVersionRequest setTransferListener( ArtifactTransferListener transferListener );
+    PluginVersionRequest setRepositorySession( RepositorySystemSession repositorySession );
 
 }