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>