michal 2004/05/18 12:39:46
Modified: maven-project/src/main/java/org/apache/maven/artifact/collector
DefaultArtifactCollector.java
ArtifactCollectionResult.java
maven-project/src/main/java/org/apache/maven/project
MavenProjectBuilder.java
DefaultMavenProjectBuilder.java
maven-project/src/test/java/org/apache/maven/artifact/collector
DefaultArtifactCollectorTest.java
Removed: maven-project/src/main/java/org/apache/maven/artifact/collector
ArtifactCollectionResultEntry.java
Log:
Reverting to simpler version of ArtifactCollector
Revision Changes Path
1.5 +108 -44
maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/DefaultArtifactCollector.java
Index: DefaultArtifactCollector.java
===================================================================
RCS file:
/home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/DefaultArtifactCollector.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DefaultArtifactCollector.java 17 May 2004 21:11:33 -0000 1.4
+++ DefaultArtifactCollector.java 18 May 2004 19:39:46 -0000 1.5
@@ -1,23 +1,25 @@
package org.apache.maven.artifact.collector;
-import java.io.File;
+import java.util.ArrayList;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import org.apache.maven.artifact.MavenArtifact;
+import org.apache.maven.artifact.collector.ArtifactCollectionResult;
+import org.apache.maven.artifact.collector.ArtifactCollector;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Michal Maczka</a>
* @version $Id$
*/
-public class DefaultArtifactCollector extends AbstractLogEnabled implements
ArtifactCollector
+public class DefaultArtifactCollector implements ArtifactCollector
{
/**
@@ -25,41 +27,107 @@
*/
private ArtifactResolver artifactResolver;
+
/**
* @see
org.apache.maven.artifact.collector.ArtifactCollector#getArtifacts(org.apache.maven.project.MavenProject)
*/
- public ArtifactCollectionResult collect( MavenProject project,
MavenProjectBuilder projectBuilder ) throws Exception
+ public ArtifactCollectionResult collect( MavenProject project,
MavenProjectBuilder projectBuilder )
+ throws Exception
{
ArtifactCollectionResult retValue = new ArtifactCollectionResult();
- for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
- {
- MavenArtifact artifact = ( MavenArtifact ) i.next();
-
- Dependency dependency = artifact.getDependency();
-
- String id = dependency.getId();
-
- retValue.addArtifact( artifact, project );
+ List queue = new LinkedList();
- MavenProject referencedProject = getProject( dependency, project,
projectBuilder );
+ queue.add( project );
+
+ while ( !queue.isEmpty() )
+ {
- if ( referencedProject != null )
+ MavenProject currentProject = ( MavenProject ) queue.remove( 0 );
+
+
+ for ( Iterator i = currentProject.getArtifacts().iterator();
i.hasNext(); )
{
- retValue.merge( referencedProject );
- }
+ MavenArtifact newArtifact = ( MavenArtifact ) i.next();
- else
- {
- getLogger().debug( "POM for " + dependency.getId() + ":" +
dependency.getVersion() + " not found" );
-
- retValue.addArtifactWithoutPom( artifact.getDependency().getId() );
- }
+ String id = newArtifact.getDependency().getId();
+
+ if ( retValue.getArtifacts().containsKey( id ) )
+ {
+ MavenArtifact knownArtifact = ( MavenArtifact )
retValue.getArtifacts().get( id );
+
+ String newVersion = newArtifact.getDependency().getVersion();
+
+ String knownVersion =
knownArtifact.getDependency().getVersion();
+
+ if ( newVersion.equals( knownVersion ) )
+ {
+ continue;
+ }
+ else
+ {
+ // WE HAVE A VERSION CONFLICT!!
+
+ // will check if this artifact is in the top level project
+ // if it is - version at the top level project wins
+ //if ( project.getDependency( key ) != null )
+ //{
+ // continue;
+ //}
+
+ List list;
+
+ if ( retValue.getConflicts().containsKey( id ) )
+ {
+ list = ( List ) retValue.getConflicts().get( id );
+ }
+ else
+ {
+ list = new ArrayList();
+
+ list.add( knownArtifact );
+
+ retValue.getConflicts().put( id, list );
+ }
+
+
+ list.add( newArtifact );
+ }
+ }
+ else
+ {
+ //It's the first time we have encountered this artifact
+
+ // Add the dependency itself
+ retValue.getArtifacts().put( id, newArtifact );
+
+ MavenProject referencedProject = getProject(
newArtifact.getDependency(), currentProject, projectBuilder );
+
+
+ if ( referencedProject == null )
+ {
+ // the pom for this artifact is not present in local
repository.
+ // we will note this fact
+ retValue.getArtifactsWithoutPoms().put( id, newArtifact );
+
+ continue;
+ }
+ else
+ {
+ //@hack for testing I need to propagate the location of
mavenRepoLocal
+ //this shows that some settings should be detached from
project.
+
+ referencedProject.setLocalRepository(
currentProject.getLocalRepository() );
+
+ // the pom for given dependency exisit we will add it to the
queue
+ queue.add( referencedProject );
+
+ }
+ }
+ }
}
-
- project.setArtifactCollectionResult( retValue );
return retValue;
@@ -69,31 +137,27 @@
* @param pomArtifact
* @return
*/
- private MavenProject getProject( Dependency dependency,
- MavenProject project, MavenProjectBuilder projectBuilder )
+ private MavenProject getProject( Dependency dependency, MavenProject project,
MavenProjectBuilder projectBuilder )
throws Exception
{
-
+
MavenProject retValue = null;
-
+
MavenArtifact pomArtifact = artifactResolver.getPomArtifact( dependency,
project );
-
+
if ( pomArtifact != null )
{
- try
- {
-
- File f = pomArtifact.getFile();
-
- retValue = projectBuilder.build( f );
- }
- catch ( ProjectBuildingException e )
- {
- throw new Exception( "POM for dependency: " + dependency.getId()
- + " exists in local repository but cannot be parsed", e );
- }
+ try
+ {
+ retValue = projectBuilder.build( pomArtifact.getFile( ), true,
false );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw new Exception( "POM for dependency: " + dependency
+ + " exists in local repository but cannot be parsed", e );
+ }
}
-
+
return retValue;
}
1.5 +16 -133
maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollectionResult.java
Index: ArtifactCollectionResult.java
===================================================================
RCS file:
/home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollectionResult.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ArtifactCollectionResult.java 17 May 2004 21:11:33 -0000 1.4
+++ ArtifactCollectionResult.java 18 May 2004 19:39:46 -0000 1.5
@@ -1,13 +1,7 @@
package org.apache.maven.artifact.collector;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
-import java.util.Set;
-
-import org.apache.maven.artifact.MavenArtifact;
-import org.apache.maven.project.MavenProject;
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
@@ -15,152 +9,41 @@
*/
public class ArtifactCollectionResult
{
- //We will keep artifacts in two data structures:
-
- /** Set<MavenArtifact> */
- private Set artifacts;
-
- /** Set<String> */
- private Set artifactsWithoutPoms;
+ /** Map<String,MavenArtifact> */
+ private Map artifacts;
+
/**
- * Map<String,ArtifactCollectionResultEntry>
+ * Map<String, List<MavenArtifact>>
*
*/
- private Map entries;
+ private Map conflicts;
- private boolean conflict;
+ /** Map<String,MavenArtifact> */
+ private Map artifactsWithoutPoms;
+
public ArtifactCollectionResult()
{
- artifacts = new HashSet();
+ artifacts = new HashMap();
- artifactsWithoutPoms = new HashSet();
-
- entries = new HashMap();
-
-
+ conflicts = new HashMap();
+ artifactsWithoutPoms = new HashMap();
}
- public Set getArtifacts()
+ public Map getArtifacts()
{
return artifacts;
}
- public Map getEntries()
+ public Map getConflicts()
{
- return entries;
+ return conflicts;
}
- public void addArtifact( MavenArtifact artifact, MavenProject project )
- {
-
- String id = artifact.getDependency().getId();
-
- ArtifactCollectionResultEntry entry;
-
- if ( entries.containsKey( id ) )
- {
- entry = ( ArtifactCollectionResultEntry ) entries.get( id );
-
- entry.add( artifact, project );
-
- }
-
- else
- {
- artifacts.add( artifact );
-
- entry = new ArtifactCollectionResultEntry( artifact, project );
-
- entries.put( id , entry );
- }
-
- conflict = conflict && entry.isConflict();
-
- }
-
- public void addArtifactWithoutPom( String id )
- {
- artifactsWithoutPoms.add( id );
- }
-
- public Set getArtifactsWithoutPoms()
+ public Map getArtifactsWithoutPoms()
{
return artifactsWithoutPoms;
}
-
- public boolean isConflict()
- {
- return conflict;
- }
-
- /**
- * @todo this is still not opimal but I prefer simpler code at the moment
- */
- public void merge( MavenProject project )
- {
- ArtifactCollectionResult other = project.getArtifactCollectionResult();
-
- Set artifactSet = other.getArtifacts();
-
- for ( Iterator iter = artifactSet.iterator(); iter.hasNext(); )
- {
- MavenArtifact artifact = ( MavenArtifact ) iter.next();
-
-
- String id = artifact.getDependency().getId();
-
- addArtifact( artifact, project );
-
- ArtifactCollectionResultEntry entry = ( ArtifactCollectionResultEntry )
entries.get( id );
-
- ArtifactCollectionResultEntry otherEntry = (
ArtifactCollectionResultEntry ) other.entries.get( id );
-
- entry.merge( otherEntry );
-
-
-
- }
-
- artifactsWithoutPoms.addAll( other.getArtifactsWithoutPoms() );
-
- }
-
- public boolean hasArtifact( String id )
- {
- boolean retValue = false;
-
- for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
- {
- MavenArtifact artifact = ( MavenArtifact ) iter.next();
-
- if ( id.equals( artifact.getDependency().getId() ) )
- {
- retValue = true;
-
- break;
- }
-
- }
-
- return retValue;
- }
-
- public boolean hasArtifactWithoutPom( String id )
- {
- boolean retValue = artifactsWithoutPoms.contains( id );
-
- return retValue;
- }
-
- public ArtifactCollectionResultEntry getEntry( String id )
- {
- ArtifactCollectionResultEntry retValue = ( ArtifactCollectionResultEntry )
entries.get( id );
-
- return retValue;
-
- }
-
-}
\ No newline at end of file
+}
1.5 +1 -1
maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
Index: MavenProjectBuilder.java
===================================================================
RCS file:
/home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- MavenProjectBuilder.java 4 Apr 2004 17:09:03 -0000 1.4
+++ MavenProjectBuilder.java 18 May 2004 19:39:46 -0000 1.5
@@ -32,7 +32,7 @@
MavenProject build( File project )
throws ProjectBuildingException;
- MavenProject build( File project, boolean useParent )
+ MavenProject build( File project, boolean useParentPom, boolean
followTransitiveDeps )
throws ProjectBuildingException;
// ----------------------------------------------------------------------
1.14 +7 -3
maven-components/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Index: DefaultMavenProjectBuilder.java
===================================================================
RCS file:
/home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- DefaultMavenProjectBuilder.java 17 May 2004 21:11:34 -0000 1.13
+++ DefaultMavenProjectBuilder.java 18 May 2004 19:39:46 -0000 1.14
@@ -80,10 +80,10 @@
public MavenProject build( File project )
throws ProjectBuildingException
{
- return build( project, true );
+ return build( project, true, true );
}
- public MavenProject build( File projectDescriptor, boolean useParentPom )
+ public MavenProject build( File projectDescriptor, boolean useParentPom,
boolean followTransitiveDeps )
throws ProjectBuildingException
{
try
@@ -105,7 +105,11 @@
setupMavenFinalName( project );
- artifactCollector.collect( project, this );
+
+ if ( followTransitiveDeps )
+ {
+ artifactCollector.collect( project, this );
+ }
project.initialize();
1.4 +23 -22
maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector/DefaultArtifactCollectorTest.java
Index: DefaultArtifactCollectorTest.java
===================================================================
RCS file:
/home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector/DefaultArtifactCollectorTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultArtifactCollectorTest.java 17 May 2004 21:11:34 -0000 1.3
+++ DefaultArtifactCollectorTest.java 18 May 2004 19:39:46 -0000 1.4
@@ -17,8 +17,10 @@
*/
import java.io.File;
-import java.util.Set;
+import java.util.List;
+import java.util.Map;
+import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.project.AbstractProjectTestCase;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
@@ -35,6 +37,7 @@
private ArtifactCollector artifactCollector;
+ private MavenProjectBuilder projectBuilder;
public DefaultArtifactCollectorTest( String testName )
@@ -49,13 +52,10 @@
artifactCollector = ( ArtifactCollector ) lookup( ArtifactCollector.ROLE );
- projectBuilder = ( MavenProjectBuilder ) lookup( MavenProjectBuilder.ROLE );
-
assertNotNull( "Test artifactCollector can't be null!", artifactCollector );
- System.setProperty( "maven.repo.local", getLocalRepository() );
+ projectBuilder = ( MavenProjectBuilder ) lookup( MavenProjectBuilder.ROLE );
- System.out.println( "local repo:" + getLocalRepository() );
}
@@ -77,10 +77,12 @@
project.setLocalRepository( getLocalRepository() );
ArtifactCollectionResult result = artifactCollector.collect( project,
projectBuilder );
-
- Set artifacts = result.getArtifacts();
- Set artifactsWithoutPoms = result.getArtifactsWithoutPoms();
+ Map artifacts = result.getArtifacts();
+
+ Map conflicts = result.getConflicts();
+
+ Map artifactsWithoutPoms = result.getArtifactsWithoutPoms();
// [d 1.1]
// |
@@ -88,33 +90,32 @@
// | |
// |---------------------- > [z] (no pom)
- assertEquals( 4, artifacts.size() );
+ assertTrue( artifacts.containsKey( "maven-test:maven-test-b" ) );
- assertTrue( result.hasArtifact( "maven-test:maven-test-b" ) );
+ assertTrue( artifacts.containsKey( "maven-test:maven-test-c" ) );
- assertTrue( result.hasArtifact( "maven-test:maven-test-c" ) );
+ assertTrue( artifacts.containsKey( "maven-test:maven-test-d" ) );
- assertTrue( result.hasArtifact( "maven-test:maven-test-d" ) );
+ assertTrue( artifacts.containsKey( "maven-test:maven-test-z" ) );
- assertTrue( result.hasArtifact( "maven-test:maven-test-z" ) );
+ assertTrue( artifactsWithoutPoms.containsKey(
"maven-test:maven-test-z" ) );
- //assertTrue( result.isConflict() );
-
- //assertEquals( 1, conflicts.size() );
- ArtifactCollectionResultEntry entryD = result.getEntry(
"maven-test:maven-test-d" );
+ assertEquals( 1, conflicts.size() );
- assertNotNull( entryD );
+ assertTrue( conflicts.containsKey( "maven-test:maven-test-d" ) );
- assertEquals( 2, entryD.getVersions().size() );
+ List conflictsForD = ( List ) conflicts.get( "maven-test:maven-test-d"
);
- assertTrue( entryD.isConflict() );
+ assertEquals( 2,conflictsForD.size() );
- assertTrue( entryD.getVersions().contains( "1.2" ) );
+ MavenArtifact d_1_1 = ( MavenArtifact ) conflictsForD.get( 0 );
- assertTrue( entryD.getVersions().contains( "1.1" ) );
+ MavenArtifact d_1_2 = ( MavenArtifact ) conflictsForD.get( 1 );
+ assertEquals( "1.1", d_1_1.getDependency().getVersion() );
+ assertEquals( "1.2", d_1_2.getDependency().getVersion() );
}
catch ( Exception e )
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]