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 2009/09/17 15:26:10 UTC

svn commit: r816180 - in /maven/maven-3/trunk: maven-compat/src/main/java/org/apache/maven/artifact/repository/ maven-compat/src/main/java/org/apache/maven/repository/ maven-core/src/main/java/org/apache/maven/ maven-core/src/main/java/org/apache/maven...

Author: bentmann
Date: Thu Sep 17 13:26:10 2009
New Revision: 816180

URL: http://svn.apache.org/viewvc?rev=816180&view=rev
Log:
[MNG-4048] Allow to resolve dependencies using version range from reactor

Modified:
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
    maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java?rev=816180&r1=816179&r2=816180&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java Thu Sep 17 13:26:10 2009
@@ -15,6 +15,8 @@
  * the License.
  */
 
+import java.util.List;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
@@ -64,7 +66,15 @@
     // New interface methods for the repository system. 
     //
     Artifact find( Artifact artifact );
-    
+
+    /**
+     * Finds the versions of the specified artifact that are available in this repository.
+     * 
+     * @param artifact The artifact whose available versions should be determined, must not be {@code null}.
+     * @return The available versions of the artifact or an empty list if none, never {@code null}.
+     */
+    List<String> findVersions( Artifact artifact );
+
     void setAuthentication( Authentication authentication );    
     Authentication getAuthentication();
     

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java?rev=816180&r1=816179&r2=816180&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java Thu Sep 17 13:26:10 2009
@@ -20,6 +20,8 @@
  */
 
 import java.io.File;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
@@ -205,6 +207,11 @@
         return artifact;
     }
 
+    public List<String> findVersions( Artifact artifact )
+    {
+        return Collections.emptyList();
+    }
+
     //
     // This implementation does not support authentication
     //

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java?rev=816180&r1=816179&r2=816180&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java Thu Sep 17 13:26:10 2009
@@ -20,6 +20,8 @@
  */
 
 import java.io.File;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
@@ -159,6 +161,11 @@
         return artifact;
     }
 
+    public List<String> findVersions( Artifact artifact )
+    {
+        return Collections.emptyList();
+    }
+
     public String getId()
     {
         return id;

Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java?rev=816180&r1=816179&r2=816180&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java (original)
+++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java Thu Sep 17 13:26:10 2009
@@ -19,6 +19,12 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -80,6 +86,26 @@
         return artifact;
     }
 
+    @Override
+    public List<String> findVersions( Artifact artifact )
+    {
+        Collection<String> versions = new LinkedHashSet<String>();
+
+        if ( buildReactor != null )
+        {
+            versions.addAll( buildReactor.findVersions( artifact ) );
+        }
+
+        if ( ideWorkspace != null )
+        {
+            versions.addAll( ideWorkspace.findVersions( artifact ) );
+        }
+
+        versions.addAll( userLocalArtifactRepository.findVersions( artifact ) );
+
+        return Collections.unmodifiableList( new ArrayList<String>( versions ) );
+    }
+
     public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
     {
         return userLocalArtifactRepository.pathOfLocalRepositoryMetadata( metadata, repository );

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java?rev=816180&r1=816179&r2=816180&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java Thu Sep 17 13:26:10 2009
@@ -1,7 +1,11 @@
 package org.apache.maven;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.maven.artifact.Artifact;
@@ -24,6 +28,8 @@
 {
     private Map<String, MavenProject> reactorProjects;
 
+    private Map<String, List<String>> availableVersions;
+
     private MavenExecutionResult executionResult;
 
     private final int hashCode;
@@ -33,6 +39,22 @@
         this.reactorProjects = reactorProjects;
         this.executionResult = ( session != null ) ? session.getResult() : null;
         hashCode = ( reactorProjects != null ) ? reactorProjects.keySet().hashCode() : 0;
+
+        availableVersions = new HashMap<String, List<String>>( reactorProjects.size() * 2 );
+        for ( MavenProject project : reactorProjects.values() )
+        {
+            String key = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+
+            List<String> versions = availableVersions.get( key );
+
+            if ( versions == null )
+            {
+                versions = new ArrayList<String>( 1 );
+                availableVersions.put( key, versions );
+            }
+
+            versions.add( project.getVersion() );
+        }
     }
 
     @Override
@@ -96,6 +118,16 @@
     }
 
     @Override
+    public List<String> findVersions( Artifact artifact )
+    {
+        String key = ArtifactUtils.versionlessKey( artifact );
+
+        List<String> versions = availableVersions.get( key );
+
+        return ( versions != null ) ? Collections.unmodifiableList( versions ) : Collections.<String> emptyList();
+    }
+
+    @Override
     public String getId()
     {
         return "reactor";

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=816180&r1=816179&r2=816180&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 Thu Sep 17 13:26:10 2009
@@ -18,6 +18,7 @@
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -401,13 +402,16 @@
             throw new ArtifactMetadataRetrievalException( e.getMessage(), e, request.getArtifact() );
         }
 
-        return retrieveAvailableVersionsFromMetadata( metadata.getMetadata() );
+        List<String> availableVersions = request.getLocalRepository().findVersions( request.getArtifact() );
+
+        return retrieveAvailableVersionsFromMetadata( metadata.getMetadata(), availableVersions );
     }
 
     public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact, ArtifactRepository localRepository, ArtifactRepository deploymentRepository )
         throws ArtifactMetadataRetrievalException
     {
         RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact );
+
         try
         {
             repositoryMetadataManager.resolveAlways( metadata, localRepository, deploymentRepository );
@@ -417,30 +421,30 @@
             throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
         }
 
-        return retrieveAvailableVersionsFromMetadata( metadata.getMetadata() );
+        List<String> availableVersions = localRepository.findVersions( artifact );
+
+        return retrieveAvailableVersionsFromMetadata( metadata.getMetadata(), availableVersions );
     }
 
-    private List<ArtifactVersion> retrieveAvailableVersionsFromMetadata( Metadata repoMetadata )
+    private List<ArtifactVersion> retrieveAvailableVersionsFromMetadata( Metadata repoMetadata, List<String> availableVersions )
     {
-        List<ArtifactVersion> versions;
+        Collection<String> versions = new LinkedHashSet<String>();
 
         if ( ( repoMetadata != null ) && ( repoMetadata.getVersioning() != null ) )
         {
-            List<String> metadataVersions = repoMetadata.getVersioning().getVersions();
+            versions.addAll( repoMetadata.getVersioning().getVersions() );
+        }
 
-            versions = new ArrayList<ArtifactVersion>( metadataVersions.size() );
+        versions.addAll( availableVersions );
 
-            for ( String version : metadataVersions )
-            {
-                versions.add( new DefaultArtifactVersion( version ) );
-            }
-        }
-        else
+        List<ArtifactVersion> artifactVersions = new ArrayList<ArtifactVersion>( versions.size() );
+
+        for ( String version : versions )
         {
-            versions = Collections.<ArtifactVersion> emptyList();
+            artifactVersions.add( new DefaultArtifactVersion( version ) );
         }
 
-        return versions;
+        return artifactVersions;
     }
 
     // USED BY MAVEN ASSEMBLY PLUGIN