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 );
}