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/09/29 23:31:35 UTC

svn commit: r1002852 - in /maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project: ./ artifact/

Author: bentmann
Date: Wed Sep 29 21:31:34 2010
New Revision: 1002852

URL: http://svn.apache.org/viewvc?rev=1002852&view=rev
Log:
[MNG-4842] [regression] Repositories discovered in dependency POMs override repositories configured for original resolution request of POM

Added:
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
      - copied, changed from r1002506, maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ReactorModelResolver.java
Removed:
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ReactorModelResolver.java
Modified:
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java

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=1002852&r1=1002851&r2=1002852&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 Wed Sep 29 21:31:34 2010
@@ -208,9 +208,9 @@ public class DefaultProjectBuilder
                                                           ReactorModelPool modelPool )
     {
         ModelResolver resolver =
-            new ReactorModelResolver( configuration.getRepositorySession(), artifactResolver,
-                                      repositoryManager,
-                                      RepositoryUtils.toRepos( configuration.getRemoteRepositories() ), modelPool );
+            new ProjectModelResolver( configuration.getRepositorySession(), artifactResolver, repositoryManager,
+                                      RepositoryUtils.toRepos( configuration.getRemoteRepositories() ),
+                                      configuration.getRepositoryMerging(), modelPool );
 
         ModelBuildingRequest request = new DefaultModelBuildingRequest();
 

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=1002852&r1=1002851&r2=1002852&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 Wed Sep 29 21:31:34 2010
@@ -105,24 +105,48 @@ public class DefaultProjectBuildingHelpe
                                                                 ProjectBuildingRequest request )
         throws InvalidRepositoryException
     {
-        List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
-        Collection<String> repoIds = new HashSet<String>();
+        List<ArtifactRepository> internalRepositories = new ArrayList<ArtifactRepository>();
 
         for ( Repository repository : pomRepositories )
         {
-            artifactRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
-            repoIds.add( repository.getId() );
+            internalRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
         }
 
-        repositorySystem.injectMirror( request.getRepositorySession(), artifactRepositories );
+        repositorySystem.injectMirror( request.getRepositorySession(), internalRepositories );
+
+        repositorySystem.injectProxy( request.getRepositorySession(), internalRepositories );
+
+        repositorySystem.injectAuthentication( request.getRepositorySession(), internalRepositories );
+
+        List<ArtifactRepository> dominantRepositories;
+        List<ArtifactRepository> recessiveRepositories;
+
+        if ( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT.equals( request.getRepositoryMerging() ) )
+        {
+            dominantRepositories = externalRepositories;
+            recessiveRepositories = internalRepositories;
+        }
+        else
+        {
+            dominantRepositories = internalRepositories;
+            recessiveRepositories = externalRepositories;
+        }
 
-        repositorySystem.injectProxy( request.getRepositorySession(), artifactRepositories );
+        List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
+        Collection<String> repoIds = new HashSet<String>();
 
-        repositorySystem.injectAuthentication( request.getRepositorySession(), artifactRepositories );
+        if ( dominantRepositories != null )
+        {
+            for ( ArtifactRepository repository : dominantRepositories )
+            {
+                repoIds.add( repository.getId() );
+                artifactRepositories.add( repository );
+            }
+        }
 
-        if ( externalRepositories != null )
+        if ( recessiveRepositories != null )
         {
-            for ( ArtifactRepository repository : externalRepositories )
+            for ( ArtifactRepository repository : recessiveRepositories )
             {
                 if ( repoIds.add( repository.getId() ) )
                 {

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=1002852&r1=1002851&r2=1002852&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 Wed Sep 29 21:31:34 2010
@@ -61,6 +61,8 @@ public class DefaultProjectBuildingReque
 
     private boolean resolveDependencies;
 
+    private RepositoryMerging repositoryMerging = RepositoryMerging.POM_DOMINANT;
+
     public DefaultProjectBuildingRequest()
     {
         processPlugins = true;
@@ -301,4 +303,19 @@ public class DefaultProjectBuildingReque
         return this;
     }
 
+    public DefaultProjectBuildingRequest setRepositoryMerging( RepositoryMerging repositoryMerging )
+    {
+        if ( repositoryMerging == null )
+        {
+            throw new IllegalArgumentException( "repository merge mode not specified" );
+        }
+        this.repositoryMerging = repositoryMerging;
+        return this;
+    }
+
+    public RepositoryMerging getRepositoryMerging()
+    {
+        return repositoryMerging;
+    }
+
 }

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java?rev=1002852&r1=1002851&r2=1002852&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java Wed Sep 29 21:31:34 2010
@@ -151,4 +151,39 @@ public interface ProjectBuildingRequest
 
     ProjectBuildingRequest setRepositorySession( RepositorySystemSession repositorySession );
 
+    /**
+     * Sets the merge mode used to combine repositories declared in the POM with the repositories specified in this
+     * request.
+     * 
+     * @param mode The repository merge mode, must not be {@code null}.
+     * @return This request for chaining, never {@code null}.
+     * @see #setRemoteRepositories(List)
+     */
+    ProjectBuildingRequest setRepositoryMerging( RepositoryMerging mode );
+
+    /**
+     * Gets the merge mode used to combine repositories declared in the POM with the repositories specified in this
+     * request
+     * 
+     * @return The merge mode, never {@code null}.
+     */
+    RepositoryMerging getRepositoryMerging();
+
+    /**
+     * The possible merge modes for combining remote repositories.
+     */
+    enum RepositoryMerging
+    {
+
+        /**
+         * The repositories declared in the POM have precedence over the repositories specified in the request.
+         */
+        POM_DOMINANT,
+
+        /**
+         * The repositories specified in the request have precedence over the repositories declared in the POM.
+         */
+        REQUEST_DOMINANT,
+    }
+
 }

Copied: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java (from r1002506, maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ReactorModelResolver.java)
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java?p2=maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java&p1=maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ReactorModelResolver.java&r1=1002506&r2=1002852&rev=1002852&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ReactorModelResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java Wed Sep 29 21:31:34 2010
@@ -48,7 +48,7 @@ import org.sonatype.aether.util.artifact
  * 
  * @author Benjamin Bentmann
  */
-class ReactorModelResolver
+class ProjectModelResolver
     implements ModelResolver
 {
 
@@ -60,7 +60,7 @@ class ReactorModelResolver
 
     private List<RemoteRepository> pomRepositories;
 
-    private final List<RemoteRepository> defaultRepositories;
+    private final List<RemoteRepository> externalRepositories;
 
     private final ArtifactResolver resolver;
 
@@ -70,28 +70,32 @@ class ReactorModelResolver
 
     private final ReactorModelPool modelPool;
 
-    public ReactorModelResolver( RepositorySystemSession session, ArtifactResolver resolver,
+    private final ProjectBuildingRequest.RepositoryMerging repositoryMerging;
+
+    public ProjectModelResolver( RepositorySystemSession session, ArtifactResolver resolver,
                                  RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories,
-                                 ReactorModelPool modelPool )
+                                 ProjectBuildingRequest.RepositoryMerging repositoryMerging, ReactorModelPool modelPool )
     {
         this.session = session;
         this.resolver = resolver;
         this.remoteRepositoryManager = remoteRepositoryManager;
         this.pomRepositories = new ArrayList<RemoteRepository>();
-        this.defaultRepositories = repositories;
+        this.externalRepositories = repositories;
         this.repositories = repositories;
+        this.repositoryMerging = repositoryMerging;
         this.repositoryIds = new HashSet<String>();
         this.modelPool = modelPool;
     }
 
-    private ReactorModelResolver( ReactorModelResolver original )
+    private ProjectModelResolver( ProjectModelResolver original )
     {
         this.session = original.session;
         this.resolver = original.resolver;
         this.remoteRepositoryManager = original.remoteRepositoryManager;
         this.pomRepositories = original.pomRepositories;
-        this.defaultRepositories = original.defaultRepositories;
+        this.externalRepositories = original.externalRepositories;
         this.repositories = original.repositories;
+        this.repositoryMerging = original.repositoryMerging;
         this.repositoryIds = new HashSet<String>( original.repositoryIds );
         this.modelPool = original.modelPool;
     }
@@ -106,10 +110,17 @@ class ReactorModelResolver
 
         List<RemoteRepository> newRepositories = Collections.singletonList( convert( repository ) );
 
-        pomRepositories =
-            remoteRepositoryManager.aggregateRepositories( session, pomRepositories, newRepositories, true );
-        repositories =
-            remoteRepositoryManager.aggregateRepositories( session, pomRepositories, defaultRepositories, false );
+        if ( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT.equals( repositoryMerging ) )
+        {
+            repositories = remoteRepositoryManager.aggregateRepositories( session, repositories, newRepositories, true );
+        }
+        else
+        {
+            pomRepositories =
+                remoteRepositoryManager.aggregateRepositories( session, pomRepositories, newRepositories, true );
+            repositories =
+                remoteRepositoryManager.aggregateRepositories( session, pomRepositories, externalRepositories, false );
+        }
     }
 
     private static RemoteRepository convert( Repository repository )
@@ -145,7 +156,7 @@ class ReactorModelResolver
 
     public ModelResolver newCopy()
     {
-        return new ReactorModelResolver( this );
+        return new ProjectModelResolver( this );
     }
 
     public ModelSource resolveModel( String groupId, String artifactId, String version )

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=1002852&r1=1002851&r2=1002852&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Wed Sep 29 21:31:34 2010
@@ -573,6 +573,7 @@ public class MavenMetadataSource
                     configuration.setRemoteRepositories( repositoryRequest.getRemoteRepositories() );
                     configuration.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
                     configuration.setProcessPlugins( false );
+                    configuration.setRepositoryMerging( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT );
                     configuration.setSystemProperties( getSystemProperties() );
                     configuration.setRepositorySession( legacySupport.getRepositorySession() );