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>