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 [7/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/version/PluginVersionResolutionException.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java Tue Aug 24 22:46:07 2010
@@ -21,7 +21,8 @@ package org.apache.maven.plugin.version;
 
 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 PluginVersionResolutionException
     extends Exception
@@ -50,8 +51,8 @@ public class PluginVersionResolutionExce
         this.baseMessage = baseMessage;
     }
 
-    public PluginVersionResolutionException( String groupId, String artifactId, ArtifactRepository localRepository,
-                                             List<ArtifactRepository> remoteRepositories, String baseMessage )
+    public PluginVersionResolutionException( String groupId, String artifactId, LocalRepository localRepository,
+                                             List<RemoteRepository> remoteRepositories, String baseMessage )
     {
         super( "Error resolving version for plugin \'" + groupId + ":" + artifactId + "\' from the repositories "
             + format( localRepository, remoteRepositories ) + ": " + baseMessage );
@@ -76,7 +77,7 @@ public class PluginVersionResolutionExce
         return baseMessage;
     }
 
-    private static String format( ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+    private static String format( LocalRepository localRepository, List<RemoteRepository> remoteRepositories )
     {
         String repos = "[";
 
@@ -87,7 +88,7 @@ public class PluginVersionResolutionExce
 
         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/version/PluginVersionResult.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java Tue Aug 24 22:46:07 2010
@@ -19,7 +19,7 @@ package org.apache.maven.plugin.version;
  * under the License.
  */
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.sonatype.aether.repository.ArtifactRepository;
 
 /**
  * Describes the result of a plugin version resolution request.

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java Tue Aug 24 22:46:07 2010
@@ -21,12 +21,13 @@ package org.apache.maven.plugin.version.
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 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.Versioning;
 import org.apache.maven.artifact.repository.metadata.io.MetadataReader;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Plugin;
@@ -34,13 +35,18 @@ import org.apache.maven.plugin.version.P
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.plugin.version.PluginVersionResolver;
 import org.apache.maven.plugin.version.PluginVersionResult;
-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.codehaus.plexus.util.StringUtils;
+import org.sonatype.aether.impl.MetadataResolver;
+import org.sonatype.aether.repository.ArtifactRepository;
+import org.sonatype.aether.repository.LocalRepository;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.resolution.MetadataRequest;
+import org.sonatype.aether.resolution.MetadataResult;
+import org.sonatype.aether.transfer.MetadataNotFoundException;
+import org.sonatype.aether.util.metadata.DefaultMetadata;
 
 /**
  * Resolves a version for a plugin.
@@ -53,11 +59,13 @@ public class DefaultPluginVersionResolve
     implements PluginVersionResolver
 {
 
+    private static final String REPOSITORY_CONTEXT = "plugin";
+
     @Requirement
     private Logger logger;
 
     @Requirement
-    private RepositorySystem repositorySystem;
+    private MetadataResolver metadataResolver;
 
     @Requirement
     private MetadataReader metadataReader;
@@ -73,18 +81,10 @@ public class DefaultPluginVersionResolve
         {
             result = resolveFromRepository( request );
 
-            if ( StringUtils.isEmpty( result.getVersion() ) )
-            {
-                throw new PluginVersionResolutionException( request.getGroupId(), request.getArtifactId(),
-                                                            request.getLocalRepository(),
-                                                            request.getRemoteRepositories(),
-                                                            "Plugin not found in any plugin repository" );
-            }
-            else if ( logger.isDebugEnabled() )
+            if ( logger.isDebugEnabled() )
             {
                 logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
-                    + " to " + result.getVersion() + " from repository "
-                    + ( result.getRepository() != null ? result.getRepository().getId() : "null" ) );
+                    + " to " + result.getVersion() + " from repository " + result.getRepository() );
             }
         }
         else if ( logger.isDebugEnabled() )
@@ -101,126 +101,75 @@ public class DefaultPluginVersionResolve
     {
         DefaultPluginVersionResult result = new DefaultPluginVersionResult();
 
-        Metadata mergedMetadata = new Metadata();
+        org.sonatype.aether.metadata.Metadata metadata =
+            new DefaultMetadata( request.getGroupId(), request.getArtifactId(), "maven-metadata.xml",
+                                 DefaultMetadata.Nature.RELEASE_OR_SNAPSHOT );
+
+        List<MetadataRequest> requests = new ArrayList<MetadataRequest>();
 
-        ArtifactRepository localRepository = request.getLocalRepository();
+        requests.add( new MetadataRequest( metadata, null, REPOSITORY_CONTEXT ) );
 
-        // Search in remote repositories for a (released) version.
-        //
-        // maven-metadata-{central|nexus|...}.xml
-        //
-        // TODO: we should cycle through the repositories but take the repository which actually satisfied the prefix.
-        for ( ArtifactRepository repository : request.getRemoteRepositories() )
+        for ( RemoteRepository repository : request.getRepositories() )
         {
-            if ( !isEnabled( repository ) )
-            {
-                logger.debug( "Skipped plugin version lookup from disabled repository " + repository.getId() );
-                continue;
-            }
+            requests.add( new MetadataRequest( metadata, repository, REPOSITORY_CONTEXT ) );
+        }
 
-            String localPath = getLocalMetadataPath( request, repository );
+        List<MetadataResult> results = metadataResolver.resolveMetadata( request.getRepositorySession(), requests );
 
-            File artifactMetadataFile = new File( localRepository.getBasedir(), localPath );
+        LocalRepository localRepo = request.getRepositorySession().getLocalRepository();
 
-            if ( !request.isOffline() && ( !artifactMetadataFile.exists() /* || user requests snapshot updates */ ) )
-            {
-                String remotePath = getRemoteMetadataPath( request, repository );
+        Versions versions = new Versions();
 
-                try
+        for ( MetadataResult res : results )
+        {
+            if ( res.getException() != null )
+            {
+                if ( res.getException() instanceof MetadataNotFoundException )
                 {
-                    repositorySystem.retrieve( repository, artifactMetadataFile, 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() );
-                    }
-
-                    continue;
+                    logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+                        + res.getRequest().getRepository() + ": " + res.getException().getMessage(), res.getException() );
                 }
-                catch ( ArtifactDoesNotExistException e )
+                else
                 {
-                    continue;
+                    logger.warn( "Could not retrieve " + res.getRequest().getMetadata() + " from "
+                        + res.getRequest().getRepository() + ": " + res.getException().getMessage() );
                 }
             }
 
-            if ( mergeMetadata( mergedMetadata, artifactMetadataFile ) )
+            if ( res.getMetadata() != null )
             {
-                result.setRepository( repository );
+                mergeMetadata( versions, res.getMetadata().getFile(), res.getRequest().getRepository() );
             }
         }
 
-        // Search in the local repositiory for a (development) version
-        //
-        // maven-metadata-local.xml
-        //
+        if ( StringUtils.isNotEmpty( versions.releaseVersion ) )
         {
-            String localPath = getLocalMetadataPath( request, localRepository );
-
-            File artifactMetadataFile = new File( localRepository.getBasedir(), localPath );
-
-            if ( mergeMetadata( mergedMetadata, artifactMetadataFile ) )
-            {
-                result.setRepository( localRepository );
-            }
+            result.setVersion( versions.releaseVersion );
+            result.setRepository( ( versions.releaseRepository == null ) ? localRepo : versions.releaseRepository );
         }
-
-        if ( mergedMetadata.getVersioning() != null )
+        else if ( StringUtils.isNotEmpty( versions.latestVersion ) )
         {
-            String release = mergedMetadata.getVersioning().getRelease();
-
-            if ( StringUtils.isNotEmpty( release ) )
-            {
-                result.setVersion( release );
-            }
-            else
-            {
-                String latest = mergedMetadata.getVersioning().getLatest();
-
-                if ( StringUtils.isNotEmpty( latest ) )
-                {
-                    result.setVersion( latest );
-                }
-            }
+            result.setVersion( versions.latestVersion );
+            result.setRepository( ( versions.latestRepository == null ) ? localRepo : versions.latestRepository );
         }
-
-        if ( StringUtils.isEmpty( result.getVersion() ) )
+        else
         {
-            throw new PluginVersionResolutionException( request.getGroupId(), request.getArtifactId(),
-                                                        request.getLocalRepository(), request.getRemoteRepositories(),
+            throw new PluginVersionResolutionException( request.getGroupId(), request.getArtifactId(), localRepo,
+                                                        request.getRepositories(),
                                                         "Plugin not found in any plugin repository" );
         }
 
         return result;
     }
 
-    private boolean isEnabled( ArtifactRepository repository )
-    {
-        return repository.getReleases().isEnabled() || repository.getSnapshots().isEnabled();
-    }
-
-    private String getLocalMetadataPath( PluginVersionRequest request, ArtifactRepository repository )
-    {
-        return request.getGroupId().replace( '.', '/' ) + '/' + request.getArtifactId() + "/maven-metadata-"
-            + repository.getId() + ".xml";
-    }
-
-    private String getRemoteMetadataPath( PluginVersionRequest request, ArtifactRepository repository )
-    {
-        return request.getGroupId().replace( '.', '/' ) + '/' + request.getArtifactId() + "/maven-metadata.xml";
-    }
-
-    private boolean mergeMetadata( Metadata target, File metadataFile )
+    private void mergeMetadata( Versions versions, File metadataFile, ArtifactRepository repository )
     {
-        if ( metadataFile.isFile() )
+        if ( metadataFile != null && metadataFile.isFile() )
         {
             try
             {
@@ -228,7 +177,7 @@ public class DefaultPluginVersionResolve
 
                 Metadata repoMetadata = metadataReader.read( metadataFile, options );
 
-                return mergeMetadata( target, repoMetadata );
+                mergeMetadata( versions, repoMetadata, repository );
             }
             catch ( IOException e )
             {
@@ -242,13 +191,31 @@ public class DefaultPluginVersionResolve
                 }
             }
         }
-
-        return false;
     }
 
-    private boolean mergeMetadata( Metadata target, Metadata source )
+    private void mergeMetadata( Versions versions, Metadata source, ArtifactRepository repository )
     {
-        return target.merge( source );
+        Versioning versioning = source.getVersioning();
+        if ( versioning != null )
+        {
+            String timestamp = StringUtils.clean( versioning.getLastUpdated() );
+
+            if ( StringUtils.isNotEmpty( versioning.getRelease() )
+                && timestamp.compareTo( versions.releaseTimestamp ) > 0 )
+            {
+                versions.releaseVersion = versioning.getRelease();
+                versions.releaseTimestamp = timestamp;
+                versions.releaseRepository = repository;
+            }
+
+            if ( StringUtils.isNotEmpty( versioning.getLatest() )
+                && timestamp.compareTo( versions.latestTimestamp ) > 0 )
+            {
+                versions.latestVersion = versioning.getLatest();
+                versions.latestTimestamp = timestamp;
+                versions.latestRepository = repository;
+            }
+        }
     }
 
     private PluginVersionResult resolveFromProject( PluginVersionRequest request )
@@ -290,4 +257,21 @@ public class DefaultPluginVersionResolve
         return null;
     }
 
+    static class Versions
+    {
+
+        String releaseVersion = "";
+
+        String releaseTimestamp = "";
+
+        ArtifactRepository releaseRepository;
+
+        String latestVersion = "";
+
+        String latestTimestamp = "";
+
+        ArtifactRepository latestRepository;
+
+    }
+
 }

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

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,82 @@
+package org.apache.maven.project;
+
+/*
+ * 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.RepositorySystemSession;
+import org.sonatype.aether.graph.DependencyFilter;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultDependencyResolutionRequest
+    implements DependencyResolutionRequest
+{
+
+    private MavenProject project;
+
+    private DependencyFilter filter;
+
+    private RepositorySystemSession session;
+
+    public DefaultDependencyResolutionRequest()
+    {
+        // enables default constructor
+    }
+
+    public DefaultDependencyResolutionRequest( MavenProject project, RepositorySystemSession session )
+    {
+        setMavenProject( project );
+        setRepositorySession( session );
+    }
+
+    public DependencyFilter getResolutionFilter()
+    {
+        return filter;
+    }
+
+    public MavenProject getMavenProject()
+    {
+        return project;
+    }
+
+    public RepositorySystemSession getRepositorySession()
+    {
+        return session;
+    }
+
+    public DependencyResolutionRequest setResolutionFilter( DependencyFilter filter )
+    {
+        this.filter = filter;
+        return this;
+    }
+
+    public DependencyResolutionRequest setMavenProject( MavenProject project )
+    {
+        this.project = project;
+        return this;
+    }
+
+    public DependencyResolutionRequest setRepositorySession( RepositorySystemSession repositorySession )
+    {
+        this.session = repositorySession;
+        return this;
+    }
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,111 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.sonatype.aether.graph.Dependency;
+import org.sonatype.aether.graph.DependencyNode;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class DefaultDependencyResolutionResult
+    implements DependencyResolutionResult
+{
+
+    private DependencyNode root;
+
+    private List<Dependency> dependencies = new ArrayList<Dependency>();
+
+    private List<Dependency> resolvedDependencies = new ArrayList<Dependency>();
+
+    private List<Dependency> unresolvedDependencies = new ArrayList<Dependency>();
+
+    private List<Exception> collectionErros = new ArrayList<Exception>();
+
+    private Map<Dependency, List<Exception>> resolutionErrors = new IdentityHashMap<Dependency, List<Exception>>();
+
+    public DependencyNode getDependencyGraph()
+    {
+        return root;
+    }
+
+    public void setDependencyGraph( DependencyNode root )
+    {
+        this.root = root;
+    }
+
+    public List<Dependency> getDependencies()
+    {
+        return dependencies;
+    }
+
+    public List<Dependency> getResolvedDependencies()
+    {
+        return resolvedDependencies;
+    }
+
+    public void addResolvedDependency( Dependency dependency )
+    {
+        dependencies.add( dependency );
+        resolvedDependencies.add( dependency );
+    }
+
+    public List<Dependency> getUnresolvedDependencies()
+    {
+        return unresolvedDependencies;
+    }
+
+    public List<Exception> getCollectionErrors()
+    {
+        return collectionErros;
+    }
+
+    public void setCollectionErrors( List<Exception> exceptions )
+    {
+        if ( exceptions != null )
+        {
+            this.collectionErros = exceptions;
+        }
+        else
+        {
+            this.collectionErros = new ArrayList<Exception>();
+        }
+    }
+
+    public List<Exception> getResolutionErrors( Dependency dependency )
+    {
+        List<Exception> errors = resolutionErrors.get( dependency );
+        return ( errors != null ) ? errors : Collections.<Exception> emptyList();
+    }
+
+    public void setResolutionErrors( Dependency dependency, List<Exception> errors )
+    {
+        dependencies.add( dependency );
+        unresolvedDependencies.add( dependency );
+        resolutionErrors.put( dependency, errors );
+    }
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java Tue Aug 24 22:46:07 2010
@@ -107,7 +107,7 @@ class DefaultModelBuildingListener
                     projectBuildingHelper.createProjectRealm( project, model, projectBuildingRequest );
 
                 project.setClassRealm( record.realm );
-                project.setExtensionArtifactFilter( record.extensionArtifactFilter );
+                project.setExtensionDependencyFilter( record.extensionArtifactFilter );
             }
             catch ( PluginResolutionException e )
             {

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java Tue Aug 24 22:46:07 2010
@@ -1,35 +1,30 @@
 package org.apache.maven.project;
 
 /*
- * 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.
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
  */
 
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
-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.model.Build;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Profile;
@@ -45,18 +40,23 @@ import org.apache.maven.model.building.M
 import org.apache.maven.model.building.ModelSource;
 import org.apache.maven.model.building.StringModelSource;
 import org.apache.maven.model.resolution.ModelResolver;
-import org.apache.maven.project.artifact.ProjectArtifact;
 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.codehaus.plexus.util.Os;
 import org.codehaus.plexus.util.StringUtils;
+import org.sonatype.aether.impl.ArtifactResolver;
+import org.sonatype.aether.impl.RemoteRepositoryManager;
+import org.sonatype.aether.repository.WorkspaceRepository;
+import org.sonatype.aether.resolution.ArtifactRequest;
+import org.sonatype.aether.resolution.ArtifactResult;
+import org.sonatype.aether.util.artifact.SubArtifact;
 
 /**
  * @version $Id$
  */
-@Component( role = ProjectBuilder.class )
+@Component(role = ProjectBuilder.class)
 public class DefaultProjectBuilder
     implements ProjectBuilder
 {
@@ -77,7 +77,13 @@ public class DefaultProjectBuilder
     private RepositorySystem repositorySystem;
 
     @Requirement
-    private ResolutionErrorHandler resolutionErrorHandler;
+    private ArtifactResolver artifactResolver;
+
+    @Requirement
+    private RemoteRepositoryManager repositoryManager;
+
+    @Requirement
+    private ProjectDependenciesResolver dependencyResolver;
 
     // ----------------------------------------------------------------------
     // MavenProjectBuilder Implementation
@@ -115,11 +121,11 @@ public class DefaultProjectBuilder
                 DefaultModelBuildingListener listener =
                     new DefaultModelBuildingListener( project, projectBuildingHelper, configuration );
                 request.setModelBuildingListener( listener );
-
+    
                 request.setPomFile( pomFile );
                 request.setModelSource( modelSource );
                 request.setLocationTracking( pomFile != null );
-
+    
                 ModelBuildingResult result;
                 try
                 {
@@ -139,34 +145,32 @@ public class DefaultProjectBuilder
                 projectBuildingHelper.selectProjectRealm( project );
             }
 
-            ArtifactResolutionResult artifactResult = null;
+            DependencyResolutionResult resolutionResult = null;
 
             if ( configuration.isResolveDependencies() )
             {
-                Artifact artifact = new ProjectArtifact( project );
-
-                ArtifactResolutionRequest artifactRequest = new ArtifactResolutionRequest()
-                    .setArtifact( artifact )
-                    .setResolveRoot( false )
-                    .setResolveTransitively( true )
-                    .setCache( configuration.getRepositoryCache() )
-                    .setLocalRepository( configuration.getLocalRepository() )
-                    .setRemoteRepositories( project.getRemoteArtifactRepositories() )
-                    .setServers( configuration.getServers() )
-                    .setMirrors( configuration.getMirrors() )
-                    .setProxies( configuration.getProxies() )
-                    .setOffline( configuration.isOffline() )
-                    .setForceUpdate( configuration.isForceUpdate() )
-                    .setManagedVersionMap( project.getManagedVersionMap() );
-                artifactRequest.setTransferListener( configuration.getTransferListener() );
-
-                artifactResult = repositorySystem.resolve( artifactRequest );
+                try
+                {
+                    DefaultDependencyResolutionRequest resolution =
+                        new DefaultDependencyResolutionRequest( project, configuration.getRepositorySession() );
+                    resolutionResult = dependencyResolver.resolve( resolution );
+                }
+                catch ( DependencyResolutionException e )
+                {
+                    resolutionResult = e.getResult();
+                }
 
-                project.setResolvedArtifacts( artifactResult.getArtifacts() );
-                project.setArtifacts( artifactResult.getArtifacts() );
+                Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
+                if ( resolutionResult.getDependencyGraph() != null )
+                {
+                    RepositoryUtils.toArtifacts( artifacts, resolutionResult.getDependencyGraph().getChildren(),
+                                                 Collections.singletonList( project.getArtifact().getId() ), null );
+                }
+                project.setResolvedArtifacts( artifacts );
+                project.setArtifacts( artifacts );
             }
 
-            return new DefaultProjectBuildingResult( project, modelProblems, artifactResult );
+            return new DefaultProjectBuildingResult( project, modelProblems, resolutionResult );
         }
         finally
         {
@@ -187,10 +191,12 @@ public class DefaultProjectBuilder
     }
 
     private ModelBuildingRequest getModelBuildingRequest( ProjectBuildingRequest configuration,
-                                                          ReactorModelPool reactorModelPool )
+                                                          ReactorModelPool modelPool )
     {
         ModelResolver resolver =
-            new RepositoryModelResolver( repositorySystem, resolutionErrorHandler, configuration, reactorModelPool );
+            new ReactorModelResolver( configuration.getRepositorySession(), artifactResolver,
+                                      repositoryManager,
+                                      RepositoryUtils.toRepos( configuration.getRemoteRepositories() ), modelPool );
 
         ModelBuildingRequest request = new DefaultModelBuildingRequest();
 
@@ -216,42 +222,34 @@ public class DefaultProjectBuilder
     public ProjectBuildingResult build( Artifact artifact, boolean allowStubModel, ProjectBuildingRequest configuration )
         throws ProjectBuildingException
     {
-        if ( !artifact.getType().equals( "pom" ) )
+        org.sonatype.aether.artifact.Artifact pomArtifact = RepositoryUtils.toArtifact( artifact );
+        if ( !pomArtifact.getExtension().equals( "pom" ) )
         {
-            artifact =
-                repositorySystem.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(),
-                                                        artifact.getVersion() );
-        }
-
-        ArtifactResolutionRequest request = new ArtifactResolutionRequest()
-            .setArtifact( artifact )
-            .setCache( configuration.getRepositoryCache() )
-            .setLocalRepository( configuration.getLocalRepository() )
-            .setRemoteRepositories( configuration.getRemoteRepositories() )
-            .setOffline( configuration.isOffline() )
-            .setForceUpdate( configuration.isForceUpdate() );
-        request.setTransferListener( configuration.getTransferListener() );
-
-        ArtifactResolutionResult result = repositorySystem.resolve( request );
-
-        if ( result.hasMissingArtifacts() && allowStubModel )
-        {
-            return build( null, createStubModelSource( artifact ), configuration );
+            pomArtifact = new SubArtifact( pomArtifact, "", "pom" );
         }
 
+        ArtifactResult result;
         try
         {
-            resolutionErrorHandler.throwErrors( request, result );
+            ArtifactRequest request = new ArtifactRequest();
+            request.setArtifact( pomArtifact );
+            request.setRepositories( RepositoryUtils.toRepos( configuration.getRemoteRepositories() ) );
+            result = artifactResolver.resolveArtifact( configuration.getRepositorySession(), request );
+            pomArtifact = result.getArtifact();
         }
-        catch ( ArtifactResolutionException e )
+        catch ( org.sonatype.aether.resolution.ArtifactResolutionException e )
         {
+            if ( e.getResults().get( 0 ).isMissing() && allowStubModel )
+            {
+                return build( null, createStubModelSource( artifact ), configuration );
+            }
             throw new ProjectBuildingException( artifact.getId(),
                                                 "Error resolving project artifact: " + e.getMessage(), e );
         }
 
-        boolean localProject = artifact.getRepository() != null && artifact.getRepository().isProjectAware();
+        boolean localProject = result.getRepository() instanceof WorkspaceRepository;
 
-        File pomFile = artifact.getFile();
+        File pomFile = pomArtifact.getFile();
 
         return build( localProject ? pomFile : null, new FileModelSource( pomFile ), configuration );
     }
@@ -279,14 +277,14 @@ public class DefaultProjectBuilder
 
         List<InterimResult> interimResults = new ArrayList<InterimResult>();
 
-        ReactorModelPool reactorModelPool = new ReactorModelPool();
+        ReactorModelPool modelPool = new ReactorModelPool();
 
         ReactorModelCache modelCache = new ReactorModelCache();
 
         boolean noErrors =
-            build( results, interimResults, pomFiles, true, recursive, config, reactorModelPool, modelCache );
+            build( results, interimResults, pomFiles, true, recursive, config, modelPool, modelCache );
 
-        populateReactorModelPool( reactorModelPool, interimResults );
+        populateReactorModelPool( modelPool, interimResults );
 
         ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
 

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java Tue Aug 24 22:46:07 2010
@@ -22,20 +22,16 @@ package org.apache.maven.project;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
 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.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ExclusionSetFilter;
 import org.apache.maven.classrealm.ClassRealmManager;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Extension;
@@ -56,10 +52,16 @@ import org.codehaus.plexus.classworlds.r
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.util.filter.ExclusionsDependencyFilter;
+import org.sonatype.aether.util.graph.PreorderNodeListGenerator;
 
 /**
  * Assists the project builder. <strong>Warning:</strong> This is an internal utility class 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
+ * technical reasons, it is not part of the public API. In particular, this class can be changed or deleted without
  * prior notice.
  * 
  * @author Benjamin Bentmann
@@ -104,10 +106,12 @@ public class DefaultProjectBuildingHelpe
         throws InvalidRepositoryException
     {
         List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
+        Collection<String> repoIds = new HashSet<String>();
 
         for ( Repository repository : pomRepositories )
         {
             artifactRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
+            repoIds.add( repository.getId() );
         }
 
         repositorySystem.injectMirror( artifactRepositories, request.getMirrors() );
@@ -118,7 +122,13 @@ public class DefaultProjectBuildingHelpe
 
         if ( externalRepositories != null )
         {
-            artifactRepositories.addAll( externalRepositories );
+            for ( ArtifactRepository repository : externalRepositories )
+            {
+                if ( repoIds.add( repository.getId() ) )
+                {
+                    artifactRepositories.add( repository );
+                }
+            }
         }
 
         artifactRepositories = repositorySystem.getEffectiveRepositories( artifactRepositories );
@@ -174,26 +184,23 @@ public class DefaultProjectBuildingHelpe
 
         List<Artifact> publicArtifacts = new ArrayList<Artifact>();
 
-        RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
-        repositoryRequest.setCache( request.getRepositoryCache() );
-        repositoryRequest.setLocalRepository( request.getLocalRepository() );
-        repositoryRequest.setRemoteRepositories( project.getPluginArtifactRepositories() );
-        repositoryRequest.setOffline( request.isOffline() );
-        repositoryRequest.setForceUpdate( request.isForceUpdate() );
-        repositoryRequest.setTransferListener( request.getTransferListener() );
-
         for ( Plugin plugin : extensionPlugins )
         {
             if ( plugin.getVersion() == null )
             {
-                PluginVersionRequest versionRequest = new DefaultPluginVersionRequest( plugin, repositoryRequest );
+                PluginVersionRequest versionRequest =
+                    new DefaultPluginVersionRequest( plugin, request.getRepositorySession(),
+                                                     project.getRemotePluginRepositories() );
                 plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() );
             }
 
             List<Artifact> artifacts;
 
-            PluginArtifactsCache.CacheRecord recordArtifacts =
-                pluginArtifactsCache.get( plugin, repositoryRequest, null );
+            PluginArtifactsCache.Key cacheKey =
+                pluginArtifactsCache.createKey( plugin, null, project.getRemotePluginRepositories(),
+                                                request.getRepositorySession() );
+
+            PluginArtifactsCache.CacheRecord recordArtifacts = pluginArtifactsCache.get( cacheKey );
 
             if ( recordArtifacts != null )
             {
@@ -201,9 +208,9 @@ public class DefaultProjectBuildingHelpe
             }
             else
             {
-                artifacts = resolveExtensionArtifacts( plugin, repositoryRequest, request );
+                artifacts = resolveExtensionArtifacts( plugin, project.getRemotePluginRepositories(), request );
 
-                recordArtifacts = pluginArtifactsCache.put( plugin, repositoryRequest, null, artifacts );
+                recordArtifacts = pluginArtifactsCache.put( cacheKey, artifacts );
             }
 
             pluginArtifactsCache.register( project, recordArtifacts );
@@ -314,10 +321,10 @@ public class DefaultProjectBuildingHelpe
                 }
             }
 
-            ArtifactFilter extensionArtifactFilter = null;
+            DependencyFilter extensionArtifactFilter = null;
             if ( !exclusions.isEmpty() )
             {
-                extensionArtifactFilter = new ExclusionSetFilter( exclusions );
+                extensionArtifactFilter = new ExclusionsDependencyFilter( exclusions );
             }
 
             record = projectRealmCache.put( extensionRealms, projectRealm, extensionArtifactFilter );
@@ -328,16 +335,17 @@ public class DefaultProjectBuildingHelpe
         return record;
     }
 
-    private List<Artifact> resolveExtensionArtifacts( Plugin extensionPlugin, RepositoryRequest repositoryRequest,
+    private List<Artifact> resolveExtensionArtifacts( Plugin extensionPlugin, List<RemoteRepository> repositories,
                                                       ProjectBuildingRequest request )
         throws PluginResolutionException
     {
-        ArtifactResolutionRequest artifactRequest = new ArtifactResolutionRequest( repositoryRequest );
-        artifactRequest.setServers( request.getServers() );
-        artifactRequest.setMirrors( request.getMirrors() );
-        artifactRequest.setProxies( request.getProxies() );
-
-        return pluginDependenciesResolver.resolve( extensionPlugin, null, artifactRequest, null );
+        DependencyNode root =
+            pluginDependenciesResolver.resolve( extensionPlugin, null, null, repositories,
+                                                request.getRepositorySession() );
+
+        PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+        root.accept( nlg );
+        return nlg.getArtifacts( false );
     }
 
     public void selectProjectRealm( MavenProject project )

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java Tue Aug 24 22:46:07 2010
@@ -25,24 +25,24 @@ import java.util.List;
 import java.util.Properties;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.RepositoryCache;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.repository.ArtifactTransferListener;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
+import org.sonatype.aether.RepositorySystemSession;
 
 public class DefaultProjectBuildingRequest
     implements ProjectBuildingRequest
 {
 
+    private RepositorySystemSession repositorySession;
+
     private boolean offline;
 
     private boolean forceUpdate;
 
-    private RepositoryCache repositoryCache;
-
     private ArtifactRepository localRepository;
 
     private List<ArtifactRepository> remoteRepositories;
@@ -126,18 +126,6 @@ public class DefaultProjectBuildingReque
         return this;
     }
 
-    public ProjectBuildingRequest setRepositoryCache( RepositoryCache repositoryCache )
-    {
-        this.repositoryCache = repositoryCache;
-
-        return this;
-    }
-
-    public RepositoryCache getRepositoryCache()
-    {
-        return repositoryCache;
-    }
-
     public ProjectBuildingRequest setLocalRepository( ArtifactRepository localRepository )
     {
         this.localRepository = localRepository;
@@ -393,4 +381,15 @@ public class DefaultProjectBuildingReque
         this.transferListener = transferListener;
     }
 
+    public RepositorySystemSession getRepositorySession()
+    {
+        return repositorySession;
+    }
+
+    public DefaultProjectBuildingRequest setRepositorySession( RepositorySystemSession repositorySession )
+    {
+        this.repositorySession = repositorySession;
+        return this;
+    }
+
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java Tue Aug 24 22:46:07 2010
@@ -23,7 +23,6 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.model.building.ModelProblem;
 
 /**
@@ -43,18 +42,17 @@ class DefaultProjectBuildingResult
 
     private List<ModelProblem> problems;
 
-    private ArtifactResolutionResult artifactResolutionResult;
+    private DependencyResolutionResult dependencyResolutionResult;
 
     /**
      * Creates a new result with the specified contents.
      * 
      * @param project The project that was built, may be {@code null}.
      * @param problems The problems that were encouterned, may be {@code null}.
-     * @param dependencyResolutionResult The result of the artifact resolution for the project dependencies, may be
-     *            {@code null}.
+     * @param dependencyResolutionResult The result of the resolution for the project dependencies, may be {@code null}.
      */
     public DefaultProjectBuildingResult( MavenProject project, List<ModelProblem> problems,
-                                         ArtifactResolutionResult dependencyResolutionResult )
+                                         DependencyResolutionResult dependencyResolutionResult )
     {
         this.projectId =
             ( project != null ) ? project.getGroupId() + ':' + project.getArtifactId() + ':' + project.getVersion()
@@ -62,7 +60,7 @@ class DefaultProjectBuildingResult
         this.pomFile = ( project != null ) ? project.getFile() : null;
         this.project = project;
         this.problems = problems;
-        this.artifactResolutionResult = dependencyResolutionResult;
+        this.dependencyResolutionResult = dependencyResolutionResult;
     }
 
     /**
@@ -104,9 +102,9 @@ class DefaultProjectBuildingResult
         return problems;
     }
 
-    public ArtifactResolutionResult getArtifactResolutionResult()
+    public DependencyResolutionResult getDependencyResolutionResult()
     {
-        return artifactResolutionResult;
+        return dependencyResolutionResult;
     }
 
 }

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,232 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Exclusion;
+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.ArtifactTypeRegistry;
+import org.sonatype.aether.collection.CollectRequest;
+import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.graph.DependencyVisitor;
+import org.sonatype.aether.resolution.ArtifactResolutionException;
+import org.sonatype.aether.resolution.ArtifactResult;
+import org.sonatype.aether.util.artifact.JavaScopes;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = ProjectDependenciesResolver.class )
+public class DefaultProjectDependenciesResolver
+    implements ProjectDependenciesResolver
+{
+
+    @Requirement
+    private Logger logger;
+
+    @Requirement
+    private RepositorySystem repoSystem;
+
+    public DependencyResolutionResult resolve( DependencyResolutionRequest request )
+        throws DependencyResolutionException
+    {
+        DefaultDependencyResolutionResult result = new DefaultDependencyResolutionResult();
+
+        MavenProject project = request.getMavenProject();
+        RepositorySystemSession session = request.getRepositorySession();
+        DependencyFilter filter = request.getResolutionFilter();
+
+        ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry();
+
+        CollectRequest collect = new CollectRequest();
+        collect.setRequestContext( "project" );
+        collect.setRepositories( project.getRemoteProjectRepositories() );
+
+        if ( project.getDependencyArtifacts() == null )
+        {
+            for ( Dependency dependency : project.getDependencies() )
+            {
+                collect.addDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
+            }
+        }
+        else
+        {
+            Map<String, Dependency> dependencies = new HashMap<String, Dependency>();
+            for ( Dependency dependency : project.getDependencies() )
+            {
+                String key = dependency.getManagementKey();
+                dependencies.put( key, dependency );
+            }
+            for ( Artifact artifact : project.getDependencyArtifacts() )
+            {
+                String key = artifact.getDependencyConflictId();
+                Dependency dependency = dependencies.get( key );
+                Collection<Exclusion> exclusions = dependency != null ? dependency.getExclusions() : null;
+                org.sonatype.aether.graph.Dependency dep = RepositoryUtils.toDependency( artifact, exclusions );
+                if ( !JavaScopes.SYSTEM.equals( dep.getScope() ) && dep.getArtifact().getFile() != null )
+                {
+                    // enable re-resolution
+                    dep = dep.setArtifact( dep.getArtifact().setFile( null ) );
+                }
+                collect.addDependency( dep );
+            }
+        }
+
+        DependencyManagement depMngt = project.getDependencyManagement();
+        if ( depMngt != null )
+        {
+            for ( Dependency dependency : depMngt.getDependencies() )
+            {
+                collect.addManagedDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
+            }
+        }
+
+        DependencyNode node;
+        try
+        {
+            node = repoSystem.collectDependencies( session, collect ).getRoot();
+            result.setDependencyGraph( node );
+        }
+        catch ( DependencyCollectionException e )
+        {
+            result.setDependencyGraph( e.getResult().getRoot() );
+            result.setCollectionErrors( e.getResult().getExceptions() );
+
+            throw new DependencyResolutionException( result, "Could not resolve dependencies for project "
+                + project.getId() + ": " + e.getMessage(), e );
+        }
+
+        if ( logger.isWarnEnabled() )
+        {
+            for ( DependencyNode child : node.getChildren() )
+            {
+                if ( !child.getRelocations().isEmpty() )
+                {
+                    logger.warn( "The artifact " + child.getRelocations().get( 0 ) + " has been relocated to "
+                        + child.getDependency().getArtifact() );
+                }
+            }
+        }
+
+        if ( logger.isDebugEnabled() )
+        {
+            node.accept( new GraphLogger( project ) );
+        }
+
+        try
+        {
+            process( result, repoSystem.resolveDependencies( session, node, filter ) );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            process( result, e.getResults() );
+
+            throw new DependencyResolutionException( result, "Could not resolve dependencies for project "
+                + project.getId() + ": " + e.getMessage(), e );
+        }
+
+        return result;
+    }
+
+    private void process( DefaultDependencyResolutionResult result, Collection<ArtifactResult> results )
+    {
+        for ( ArtifactResult ar : results )
+        {
+            if ( ar.isResolved() )
+            {
+                result.addResolvedDependency( ar.getRequest().getDependencyNode().getDependency() );
+            }
+            else
+            {
+                result.setResolutionErrors( ar.getRequest().getDependencyNode().getDependency(), ar.getExceptions() );
+            }
+        }
+    }
+
+    class GraphLogger
+        implements DependencyVisitor
+    {
+
+        private final MavenProject project;
+
+        private String indent = "";
+
+        public GraphLogger( MavenProject project )
+        {
+            this.project = project;
+        }
+
+        public boolean visitEnter( DependencyNode node )
+        {
+            StringBuilder buffer = new StringBuilder( 128 );
+            buffer.append( indent );
+            org.sonatype.aether.graph.Dependency dep = node.getDependency();
+            if ( dep != null )
+            {
+                org.sonatype.aether.artifact.Artifact art = dep.getArtifact();
+
+                buffer.append( art );
+                buffer.append( ':' ).append( dep.getScope() );
+
+                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( ")" );
+                }
+            }
+            else
+            {
+                buffer.append( project.getGroupId() );
+                buffer.append( ':' ).append( project.getArtifactId() );
+                buffer.append( ':' ).append( project.getPackaging() );
+                buffer.append( ':' ).append( project.getVersion() );
+            }
+
+            logger.debug( buffer.toString() );
+            indent += "   ";
+            return true;
+        }
+
+        public boolean visitLeave( DependencyNode node )
+        {
+            indent = indent.substring( 0, indent.length() - 3 );
+            return true;
+        }
+
+    }
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java?rev=988749&r1=988748&r2=988749&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java Tue Aug 24 22:46:07 2010
@@ -24,9 +24,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.codehaus.plexus.component.annotations.Component;
+import org.sonatype.aether.graph.DependencyFilter;
 
 /**
  * Default project realm cache implementation. Assumes cached data does not change.
@@ -84,7 +84,7 @@ public class DefaultProjectRealmCache
     }
 
     public CacheRecord put( List<? extends ClassRealm> extensionRealms, ClassRealm projectRealm,
-                            ArtifactFilter extensionArtifactFilter )
+                            DependencyFilter extensionArtifactFilter )
     {
         if ( projectRealm == null )
         {

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,42 @@
+package org.apache.maven.project;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DependencyResolutionException
+    extends Exception
+{
+
+    private DependencyResolutionResult result;
+
+    public DependencyResolutionException( DependencyResolutionResult result, String message, Throwable cause )
+    {
+        super( message, cause );
+        this.result = result;
+    }
+
+    public DependencyResolutionResult getResult()
+    {
+        return result;
+    }
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,79 @@
+package org.apache.maven.project;
+
+/*
+ * 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.RepositorySystemSession;
+import org.sonatype.aether.graph.DependencyFilter;
+
+/**
+ * A request to resolve the dependencies of a project.
+ * 
+ * @author Benjamin Bentmann
+ */
+public interface DependencyResolutionRequest
+{
+
+    /**
+     * Gets the project to resolve dependencies for.
+     * 
+     * @return The project to resolve dependencies for or {@code null} if not set.
+     */
+    MavenProject getMavenProject();
+
+    /**
+     * Sets the project to resolve dependencies for.
+     * 
+     * @param project The project to resolve dependencies for, may be {@code null}.
+     * @return This request for chaining, never {@code null}.
+     */
+    DependencyResolutionRequest setMavenProject( MavenProject project );
+
+    /**
+     * Gets the filter used to exclude some dependencies from resolution.
+     * 
+     * @return The filter to exclude dependencies from resolution or {@code null} to resolve all dependencies.
+     */
+    DependencyFilter getResolutionFilter();
+
+    /**
+     * Sets the filter used to exclude some dependencies from resolution.
+     * 
+     * @param filter The filter to exclude dependencies from resolution, may be {@code null} to resolve all
+     *            dependencies.
+     * @return This request for chaining, never {@code null}.
+     */
+    DependencyResolutionRequest setResolutionFilter( DependencyFilter filter );
+
+    /**
+     * Gets the session to use for repository access.
+     * 
+     * @return The repository session or {@code null} if not set.
+     */
+    RepositorySystemSession getRepositorySession();
+
+    /**
+     * Sets the session to use for repository access.
+     * 
+     * @param repositorySession The repository session to use.
+     * @return This request for chaining, never {@code null}.
+     */
+    DependencyResolutionRequest setRepositorySession( RepositorySystemSession repositorySession );
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java?rev=988749&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java (added)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java Tue Aug 24 22:46:07 2010
@@ -0,0 +1,79 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.sonatype.aether.graph.Dependency;
+import org.sonatype.aether.graph.DependencyNode;
+
+/**
+ * The result of a project dependency resolution.
+ * 
+ * @author Benjamin Bentmann
+ */
+public interface DependencyResolutionResult
+{
+
+    /**
+     * Gets the dependency graph of the project.
+     * 
+     * @return The dependency graph or {@code null} if not available.
+     */
+    DependencyNode getDependencyGraph();
+
+    /**
+     * Gets the transitive dependencies of the project that were not excluded by a filter, whether successfully resolved
+     * or not.
+     * 
+     * @return The transitive dependencies, never {@code null}.
+     */
+    List<Dependency> getDependencies();
+
+    /**
+     * Gets the dependencies that were successfully resolved.
+     * 
+     * @return The resolved dependencies, never {@code null}.
+     */
+    List<Dependency> getResolvedDependencies();
+
+    /**
+     * Gets the dependencies that could not be resolved.
+     * 
+     * @return The unresolved dependencies, never {@code null}.
+     */
+    List<Dependency> getUnresolvedDependencies();
+
+    /**
+     * Gets the errors that occurred while building the dependency graph.
+     * 
+     * @return The errors that occurred while building the dependency graph, never {@code null}.
+     */
+    List<Exception> getCollectionErrors();
+
+    /**
+     * Gets the errors that occurred while resolving the specified dependency.
+     * 
+     * @param dependency The dependency for which to retrieve the errors, must not be {@code null}.
+     * @return The resolution errors for the specified dependency, never {@code null}.
+     */
+    List<Exception> getResolutionErrors( Dependency dependency );
+
+}

Propchange: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

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