You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/07/07 00:19:25 UTC

svn commit: r554077 - in /maven/shared/trunk/maven-repository-builder/src: main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java

Author: jdcasey
Date: Fri Jul  6 15:19:23 2007
New Revision: 554077

URL: http://svn.apache.org/viewvc?view=rev&rev=554077
Log:
[MASSEMBLY-210] This fixes inclusion of parent poms, for the current project and dependencies...both in cases where the current pom's parent is in the repository, and in the filesystem.

Modified:
    maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
    maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java

Modified: maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java?view=diff&rev=554077&r1=554076&r2=554077
==============================================================================
--- maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java (original)
+++ maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java Fri Jul  6 15:19:23 2007
@@ -18,24 +18,8 @@
  */
 package org.apache.maven.shared.repository;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.lang.reflect.Field;
-import java.security.NoSuchAlgorithmException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -68,6 +52,23 @@
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.lang.reflect.Field;
+import java.security.NoSuchAlgorithmException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
 /**
  * @author Jason van Zyl
  * @plexus.component role="org.apache.maven.shared.repository.RepositoryAssembler" role-hint="default"
@@ -207,7 +208,7 @@
         }
 
         addPomWithAncestry( project.getArtifact(), project.getRemoteArtifactRepositories(), localRepository,
-                            targetRepository, groupVersionAlignments, project.getFile() );
+                            targetRepository, groupVersionAlignments, project );
     }
 
     private ArtifactFilter buildRepositoryFilter( RepositoryInfo repository, MavenProject project )
@@ -307,7 +308,7 @@
 
                     writeChecksums( targetFile );
 
-                    addPomWithAncestry( a, project.getRemoteArtifactRepositories(), localRepository, targetRepository, groupVersionAlignments, null );
+                    addPomWithAncestry( a, project.getRemoteArtifactRepositories(), localRepository, targetRepository, groupVersionAlignments, project );
                 }
             }
         }
@@ -330,61 +331,64 @@
      * @param pomFileOverride This is used to allow injection of a POM's file directly, for
      *         cases where the POM has not been installed into the repository yet.
      */
-    private void addPomWithAncestry( Artifact artifact, List remoteArtifactRepositories,
+    private void addPomWithAncestry( final Artifact artifact, List remoteArtifactRepositories,
                                      ArtifactRepository localRepository, ArtifactRepository targetRepository,
-                                     Map groupVersionAlignments, File pomFileOverride )
+                                     Map groupVersionAlignments, MavenProject masterProject )
         throws RepositoryAssemblyException
     {
         String type = artifact.getType();
+        Map refs = masterProject.getProjectReferences();
+
+        String projectKey = ArtifactUtils.versionlessKey( artifact );
 
         MavenProject p;
-        try
+        if ( artifact == masterProject.getArtifact() )
         {
-            if ( pomFileOverride == null )
+            p = masterProject;
+        }
+        else if ( refs.containsKey( projectKey ) )
+        {
+            p = (MavenProject) refs.get( projectKey );
+        }
+        else
+        {
+            try
             {
-                artifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
-                p = projectBuilder.buildFromRepository( artifact, remoteArtifactRepositories, localRepository );
+                artifact.isSnapshot();
+
+                Artifact pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion() );
+                p = projectBuilder.buildFromRepository( pomArtifact, remoteArtifactRepositories, localRepository );
             }
-            else
+            catch ( ProjectBuildingException e )
             {
-                p = projectBuilder.build( pomFileOverride, localRepository, null );
+                throw new RepositoryAssemblyException( "Error reading POM for: " + artifact.getId(), e );
             }
         }
-        catch ( ProjectBuildingException e )
-        {
-            throw new RepositoryAssemblyException( "Error reading POM for: " + artifact.getId(), e );
-        }
 
         // if we're dealing with a POM artifact, then we've already copied the POM itself; only process ancestry.
         // NOTE: We need to preserve the original artifact for comparison here.
         if ( "pom".equals( type ) )
         {
             p = p.getParent();
-
-            // this automatically negates the pomFileOverride, if it exists.
-            pomFileOverride = null;
         }
 
         while( p != null )
         {
-            artifact = artifactFactory.createProjectArtifact( p.getGroupId(), p.getArtifactId(), p
+            Artifact destArtifact = artifactFactory.createProjectArtifact( p.getGroupId(), p.getArtifactId(), p
                 .getVersion() );
 
-            setAlignment( artifact, groupVersionAlignments );
+            setAlignment( destArtifact, groupVersionAlignments );
 
-            File sourceFile;
+            File sourceFile = p.getFile();
 
-            // if we have an override for the current POM, use it.
-            if ( pomFileOverride != null )
+            // try to use the POM file from the project instance itself first.
+            if ( ( sourceFile == null ) || !sourceFile.exists() )
             {
-                sourceFile = pomFileOverride;
+                // something that hasn't been realigned yet...we want to read from the original location.
+                Artifact srcArtifact = artifactFactory.createProjectArtifact( p.getGroupId(), p.getArtifactId(), p
+                                                                               .getVersion() );
 
-                // use it at most once.
-                pomFileOverride = null;
-            }
-            else
-            {
-                sourceFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );
+                sourceFile = new File( localRepository.getBasedir(), localRepository.pathOf( srcArtifact ) );
             }
 
             if ( !sourceFile.exists() )
@@ -392,7 +396,7 @@
                 break;
             }
 
-            File targetFile = new File( targetRepository.getBasedir(), targetRepository.pathOf( artifact ) );
+            File targetFile = new File( targetRepository.getBasedir(), targetRepository.pathOf( destArtifact ) );
 
             try
             {
@@ -400,7 +404,7 @@
             }
             catch ( IOException e )
             {
-                throw new RepositoryAssemblyException( "Error writing POM metdata: " + artifact.getId(), e );
+                throw new RepositoryAssemblyException( "Error writing POM metdata: " + destArtifact.getId(), e );
             }
 
             try
@@ -409,7 +413,7 @@
             }
             catch ( IOException e )
             {
-                throw new RepositoryAssemblyException( "Error writing checksums for POM: " + artifact.getId(), e );
+                throw new RepositoryAssemblyException( "Error writing checksums for POM: " + destArtifact.getId(), e );
             }
 
             p = p.getParent();

Modified: maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java?view=diff&rev=554077&r1=554076&r2=554077
==============================================================================
--- maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java (original)
+++ maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java Fri Jul  6 15:19:23 2007
@@ -18,7 +18,6 @@
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.shared.repository.model.DefaultRepositoryInfo;
 import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.logging.Logger;
 
 import java.io.File;
 import java.io.IOException;
@@ -50,8 +49,6 @@
     {
         super.setUp();
 
-        getContainer().getLoggerManager().setThreshold( Logger.LEVEL_DEBUG );
-
         projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() );
 
         defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.class.getName(), "default" );
@@ -161,11 +158,6 @@
         assertTrue( parentFile.exists() );
     }
 
-    // TODO: This is not working, because all projects in addPomWithAncestry(..) are
-    // assumed to come from the repository...maybe we can start being a little smarter on this
-    // by using p.getFile() != null && p.getFile().exists() checks for ancestor poms...
-    // seems like something like that was in at one point, but broke many things...
-/*
     public void test_MASSEMBLY_210_projectParentIsNotInRepository()
         throws ProjectBuildingException, RepositoryAssemblyException, IOException, InvalidDependencyVersionException
     {
@@ -196,5 +188,5 @@
 
         assertTrue( parentFile.exists() );
     }
-*/
+
 }