You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2008/12/15 01:20:04 UTC

svn commit: r726584 - in /maven/components/trunk/maven-project/src: main/java/org/apache/maven/ main/java/org/apache/maven/project/ test/resources/org/apache/maven/project/ test/resources/org/apache/maven/project/canonical/

Author: jvanzyl
Date: Sun Dec 14 16:20:04 2008
New Revision: 726584

URL: http://svn.apache.org/viewvc?rev=726584&view=rev
Log:
MNG-3905: merged all the artifact/repository handling bits into MavenTools
o clean up hand-written component descriptors


Removed:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultRepositoryHelper.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/RepositoryHelper.java
Modified:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/MavenTools.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
    maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java?rev=726584&r1=726583&r2=726584&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java Sun Dec 14 16:20:04 2008
@@ -22,33 +22,56 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Model;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.RepositoryPolicy;
 import org.apache.maven.project.MissingRepositoryElementException;
+import org.apache.maven.project.ProjectBuildingException;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
 
 /**
  * @author Jason van Zyl
  */
 @Component(role = MavenTools.class)
 public class DefaultMavenTools
-    implements MavenTools
+    implements MavenTools, LogEnabled
 {
     @Requirement
+    private ArtifactFactory artifactFactory;
+
+    @Requirement
+    private ArtifactResolver artifactResolver;
+    
+    @Requirement
     private ArtifactRepositoryFactory artifactRepositoryFactory;
 
     @Requirement
     private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
+        
+    @Requirement
+    private Logger logger;
+    
+    private static HashMap<String, Artifact> cache = new HashMap<String, Artifact>();
     
     // ----------------------------------------------------------------------------
     // Code snagged from ProjectUtils: this will have to be moved somewhere else
@@ -219,5 +242,136 @@
     public void setGlobalChecksumPolicy( String policy )
     {
         artifactRepositoryFactory.setGlobalChecksumPolicy( policy );        
-    }    
+    }
+    
+    // Taken from RepositoryHelper
+    
+    public void findModelFromRepository( Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository )
+        throws ProjectBuildingException
+    {
+
+        if ( cache.containsKey( artifact.getId() ) )
+        {
+            artifact.setFile( cache.get( artifact.getId() ).getFile() );
+        }
+
+        String projectId = safeVersionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
+        remoteArtifactRepositories = normalizeToArtifactRepositories( remoteArtifactRepositories, projectId );
+
+        Artifact projectArtifact;
+
+        // if the artifact is not a POM, we need to construct a POM artifact based on the artifact parameter given.
+        if ( "pom".equals( artifact.getType() ) )
+        {
+            projectArtifact = artifact;
+        }
+        else
+        {
+            logger.debug( "Attempting to build MavenProject instance for Artifact (" + artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion() + ") of type: "
+                          + artifact.getType() + "; constructing POM artifact instead." );
+
+            projectArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getScope() );
+        }
+
+        try
+        {
+            artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
+
+            File file = projectArtifact.getFile();
+            artifact.setFile( file );
+            cache.put( artifact.getId(), artifact );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new ProjectBuildingException( projectId, "Error getting POM for '" + projectId + "' from the repository: " + e.getMessage(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new ProjectBuildingException( projectId, "POM '" + projectId + "' not found in repository: " + e.getMessage(), e );
+        }
+    }
+
+    public List buildArtifactRepositories( Model model )
+        throws ProjectBuildingException
+    {
+        try
+        {
+            return buildArtifactRepositories( model.getRepositories() );
+        }
+        catch ( InvalidRepositoryException e )
+        {
+            String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
+
+            throw new ProjectBuildingException( projectId, e.getMessage(), e );
+        }
+    }
+
+    private List normalizeToArtifactRepositories( List remoteArtifactRepositories, String projectId )
+        throws ProjectBuildingException
+    {
+        List normalized = new ArrayList( remoteArtifactRepositories.size() );
+
+        boolean normalizationNeeded = false;
+        for ( Iterator it = remoteArtifactRepositories.iterator(); it.hasNext(); )
+        {
+            Object item = it.next();
+
+            if ( item instanceof ArtifactRepository )
+            {
+                normalized.add( item );
+            }
+            else if ( item instanceof Repository )
+            {
+                Repository repo = (Repository) item;
+                try
+                {
+                    item = buildArtifactRepository( repo );
+
+                    normalized.add( item );
+                    normalizationNeeded = true;
+                }
+                catch ( InvalidRepositoryException e )
+                {
+                    throw new ProjectBuildingException( projectId, "Error building artifact repository for id: " + repo.getId(), e );
+                }
+            }
+            else
+            {
+                throw new ProjectBuildingException( projectId, "Error building artifact repository from non-repository information item: " + item );
+            }
+        }
+
+        if ( normalizationNeeded )
+        {
+            return normalized;
+        }
+        else
+        {
+            return remoteArtifactRepositories;
+        }
+    }
+
+    private String safeVersionlessKey( String groupId, String artifactId )
+    {
+        String gid = groupId;
+
+        if ( StringUtils.isEmpty( gid ) )
+        {
+            gid = "unknown";
+        }
+
+        String aid = artifactId;
+
+        if ( StringUtils.isEmpty( aid ) )
+        {
+            aid = "unknown";
+        }
+
+        return ArtifactUtils.versionlessKey( gid, aid );
+    }
+
+    public void enableLogging( Logger logger )
+    {
+        this.logger = logger;
+    }
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/MavenTools.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/MavenTools.java?rev=726584&r1=726583&r2=726584&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/MavenTools.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/MavenTools.java Sun Dec 14 16:20:04 2008
@@ -19,12 +19,15 @@
  * under the License.
  */
 
+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.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Model;
 import org.apache.maven.model.Repository;
+import org.apache.maven.project.ProjectBuildingException;
 
 import java.io.IOException;
 import java.util.List;
@@ -57,4 +60,13 @@
     void setGlobalUpdatePolicy( String policy );
     
     void setGlobalChecksumPolicy( String policy );
+    
+    // Taken from RepositoryHelper
+    
+    void findModelFromRepository( Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository )
+        throws ProjectBuildingException;
+
+    List buildArtifactRepositories( Model model )
+        throws ProjectBuildingException;
+    
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=726584&r1=726583&r2=726584&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Sun Dec 14 16:20:04 2008
@@ -19,8 +19,20 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.maven.MavenTools;
-import org.apache.maven.shared.model.InterpolatorProperty;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.InvalidRepositoryException;
@@ -41,9 +53,13 @@
 import org.apache.maven.profiles.activation.ProfileActivationException;
 import org.apache.maven.profiles.build.ProfileAdvisor;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
-import org.apache.maven.project.builder.*;
+import org.apache.maven.project.builder.Interpolator;
+import org.apache.maven.project.builder.PomArtifactResolver;
+import org.apache.maven.project.builder.PomInterpolatorTag;
+import org.apache.maven.project.builder.ProjectBuilder;
 import org.apache.maven.project.validation.ModelValidationResult;
 import org.apache.maven.project.validation.ModelValidator;
+import org.apache.maven.shared.model.InterpolatorProperty;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.LogEnabled;
@@ -54,15 +70,6 @@
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.net.URL;
-import java.util.*;
-import java.text.SimpleDateFormat;
-
 
 /**
  * @version $Id$
@@ -85,9 +92,6 @@
 
     @Requirement
     private ProjectBuilder projectBuilder;
-
-    @Requirement
-    private RepositoryHelper repositoryHelper;
     
     private MavenXpp3Reader modelReader;
 
@@ -135,7 +139,7 @@
     public MavenProject build( File projectDescriptor, ProjectBuilderConfiguration config )
         throws ProjectBuildingException
     {
-        MavenProject project = readModelFromLocalPath( "unknown", projectDescriptor, new PomArtifactResolver( config.getLocalRepository(), repositoryHelper
+        MavenProject project = readModelFromLocalPath( "unknown", projectDescriptor, new PomArtifactResolver( config.getLocalRepository(), mavenTools
             .buildArtifactRepositories( getSuperProject( config, projectDescriptor, true ).getModel() ), artifactResolver ), config );
 
         project.setFile( projectDescriptor );
@@ -189,12 +193,12 @@
         }        
         
         File f = (artifact.getFile() != null) ? artifact.getFile() : new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );
-        repositoryHelper.findModelFromRepository( artifact, remoteArtifactRepositories, localRepository );
+        mavenTools.findModelFromRepository( artifact, remoteArtifactRepositories, localRepository );
 
         ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
 
         List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>( remoteArtifactRepositories );
-        artifactRepositories.addAll( repositoryHelper.buildArtifactRepositories( getSuperProject( config, artifact.getFile(), false ).getModel() ) );
+        artifactRepositories.addAll( mavenTools.buildArtifactRepositories( getSuperProject( config, artifact.getFile(), false ).getModel() ) );
 
         project = readModelFromLocalPath( "unknown", artifact.getFile(), new PomArtifactResolver( config.getLocalRepository(), artifactRepositories, artifactResolver ), config );
         project = buildWithProfiles( project.getModel(), config, artifact.getFile(), project.getParentFile(), false );

Modified: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml?rev=726584&r1=726583&r2=726584&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml (original)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml Sun Dec 14 16:20:04 2008
@@ -19,41 +19,6 @@
 
 <plexus>
   <components>
-<!--Eliminate this component after Mercury Integration-->
-    <component>
-      <role>org.apache.maven.project.RepositoryHelper</role>
-      <implementation>org.apache.maven.project.DefaultRepositoryHelper</implementation>
-      <requirements>
-        <requirement>
-          <role>org.apache.maven.profiles.build.ProfileAdvisor</role>
-          <role-hint>default</role-hint>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
-          <role-hint>default</role-hint>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.MavenTools</role>
-        </requirement>
-      </requirements>
-    </component>       
-    <!-- Due to PLX-108, have to work around it...
-    <component>
-      <role>org.apache.maven.artifact.ArtifactResolver</role>
-      <implementation>org.apache.maven.project.TestArtifactResolvertion>
-      <requirements>
-        <requirement>
-          <role>org.apache.maven.artifact.manager.WagonManager</role>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
-        </requirement>
-      </requirements>
-    </component>
-    -->
     <component>
       <role>org.apache.maven.profiles.injection.ProfileInjector</role>
       <role-hint>test</role-hint>
@@ -80,11 +45,6 @@
       <role>org.apache.maven.project.TestArtifactResolver</role>
       <implementation>org.apache.maven.project.TestArtifactResolver</implementation>
       <requirements>
-        <!--
-        <requirement>
-          <role>org.apache.maven.artifact.manager.ArtifactManager</role>
-        </requirement>
-        -->
         <requirement>
           <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
         </requirement>
@@ -115,9 +75,6 @@
       <implementation>org.apache.maven.project.TestProjectBuilder</implementation>
       <requirements>
         <requirement>
-             <role>org.apache.maven.project.RepositoryHelper</role>
-        </requirement>
-        <requirement>
              <role>org.apache.maven.project.builder.ProjectBuilder</role>
         </requirement>
         <requirement>

Modified: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml?rev=726584&r1=726583&r2=726584&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml (original)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml Sun Dec 14 16:20:04 2008
@@ -20,40 +20,6 @@
 <plexus>
   <components><!--Eliminate this component after Mercury Integration-->
     <component>
-      <role>org.apache.maven.project.RepositoryHelper</role>
-      <implementation>org.apache.maven.project.DefaultRepositoryHelper</implementation>
-      <requirements>
-        <requirement>
-          <role>org.apache.maven.profiles.build.ProfileAdvisor</role>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
-          <role-hint>default</role-hint>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.MavenTools</role>
-        </requirement>
-      </requirements>
-    </component> 
-
-    <!-- Due to PLX-108, have to work around it...
-    <component>
-      <role>org.apache.maven.artifact.ArtifactResolver</role>
-      <implementation>org.apache.maven.project.TestArtifactResolvertion>
-      <requirements>
-        <requirement>
-          <role>org.apache.maven.artifact.manager.WagonManager</role>
-        </requirement>
-        <requirement>
-          <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
-        </requirement>
-      </requirements>
-    </component>
-    -->
-    <component>
       <role>org.apache.maven.profiles.injection.ProfileInjector</role>
       <role-hint>test</role-hint>
       <implementation>org.apache.maven.project.injection.TestProfileInjector</implementation>
@@ -112,9 +78,6 @@
       <implementation>org.apache.maven.project.TestProjectBuilder</implementation>
       <requirements>
         <requirement>
-             <role>org.apache.maven.project.RepositoryHelper</role>
-        </requirement>
-        <requirement>
              <role>org.apache.maven.project.builder.ProjectBuilder</role>
         </requirement>
         <requirement>