You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by mi...@apache.org on 2004/05/08 14:19:23 UTC
cvs commit: maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector DefaultArtifactCollectorTest.java
michal 2004/05/08 05:19:23
Modified: maven-project/src/main/resources/META-INF/plexus
components.xml
maven-project/src/main/java/org/apache/maven/artifact
MavenArtifact.java AbstractMavenArtifact.java
maven-project/src/test/java/org/apache/maven/project
RecursiveProjectInheritanceTest.java
ProjectReactorTest.java
AbstractProjectTestCase.java
DefaultProjectBuilderTest.java
ProjectBaseDirectoryAlignmentTest.java
maven-project/src/main/java/org/apache/maven/project
MavenProject.java DefaultMavenProjectBuilder.java
maven-project/src/main/java/org/apache/maven/artifact/satisfier
DefaultArtifactSatisfier.java
maven-project/src/main/java/org/apache/maven/artifact/collector
DefaultArtifactCollector.java
ArtifactCollector.java
ArtifactCollectionResult.java
maven-project/src/main/java/org/apache/maven/artifact/factory
DefaultMavenArtifactFactory.java
Added: maven-project/src/test/resources/maven-repo-local/maven-test/poms
maven-test-c-1.0.pom maven-test-a-1.0.pom
maven-test-b-1.0.pom maven-test-d-1.2.pom
maven-test-d-1.1.pom
maven-project/src/test/resources/maven-repo-local/maven-test/jars
maven-test-c-1.0.jar maven-test-a-1.0.jar
maven-test-b-1.0.jar maven-test-d-1.0.jar
maven-project/src/main/java/org/apache/maven/artifact/resolver
DefaultArtifactResolver.java ArtifactResolver.java
maven-project/src/test/java/org/apache/maven/artifact/resolver
DefaultArtifactResolverTest.java
maven-project/src/test/java/org/apache/maven/artifact/collector
DefaultArtifactCollectorTest.java
Log:
First usable version of ArtifactCollector (transitive dependencies).
I left some comments in the code...
Revision Changes Path
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-c-1.0.pom
Index: maven-test-c-1.0.pom
===================================================================
<project>
<groupId>maven-test</groupId>
<artifactId>maven-test-c</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>maven-test</groupId>
<artifactId>maven-test-d</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>maven-test</groupId>
<artifactId>maven-test-z</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-a-1.0.pom
Index: maven-test-a-1.0.pom
===================================================================
<project>
<groupId>maven-test</groupId>
<artifactId>maven-test-a</artifactId>
<currentVersion>1.0</currentVersion>
<dependencies>
<dependency>
<groupId>maven-test</groupId>
<artifactId>maven-test-b</artifactId>
<version>1.0</version>
</dependency>
<!-- pom for this dependency is missing -->
<dependency>
<groupId>maven-test</groupId>
<artifactId>maven-test-z</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-b-1.0.pom
Index: maven-test-b-1.0.pom
===================================================================
<project>
<groupId>maven-test</groupId>
<artifactId>maven-test-b</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>maven-test</groupId>
<artifactId>maven-test-c</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>maven-test</groupId>
<artifactId>maven-test-d</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-d-1.2.pom
Index: maven-test-d-1.2.pom
===================================================================
<project>
<groupId>maven-test</groupId>
<artifactId>maven-test-d/artifactId>
<version>1.1</version>
</project>
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/poms/maven-test-d-1.1.pom
Index: maven-test-d-1.1.pom
===================================================================
<project>
<groupId>maven-test</groupId>
<artifactId>maven-test-d</artifactId>
<version>1.1</version>
</project>
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-c-1.0.jar
Index: maven-test-c-1.0.jar
===================================================================
foo
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-a-1.0.jar
Index: maven-test-a-1.0.jar
===================================================================
foo
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-b-1.0.jar
Index: maven-test-b-1.0.jar
===================================================================
foo
1.1 maven-components/maven-project/src/test/resources/maven-repo-local/maven-test/jars/maven-test-d-1.0.jar
Index: maven-test-d-1.0.jar
===================================================================
foo
1.7 +20 -0 maven-components/maven-project/src/main/resources/META-INF/plexus/components.xml
Index: components.xml
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/resources/META-INF/plexus/components.xml,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- components.xml 12 Apr 2004 14:41:30 -0000 1.6
+++ components.xml 8 May 2004 12:19:22 -0000 1.7
@@ -7,9 +7,12 @@
<requirement>
<role>org.apache.maven.project.ModelInheritanceAssembler</role>
</requirement>
+
+ <!-- This introduces circ. dep. builder ==> collector ==> builder
<requirement>
<role>org.apache.maven.artifact.collector.ArtifactCollector</role>
</requirement>
+ -->
<requirement>
<role>org.apache.maven.artifact.factory.MavenArtifactFactory</role>
</requirement>
@@ -25,7 +28,24 @@
<component>
<role>org.apache.maven.artifact.collector.ArtifactCollector</role>
<implementation>org.apache.maven.artifact.collector.DefaultArtifactCollector</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.project.MavenProjectBuilder</role>
+ </requirement>
+ </requirements>
</component>
+ <component>
+ <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
+ <implementation>org.apache.maven.artifact.resolver.DefaultArtifactResolver</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.factory.MavenArtifactFactory</role>
+ </requirement>
+ </requirements>
+ </component>
<component>
<role>org.apache.maven.project.ModelInheritanceAssembler</role>
<implementation>org.apache.maven.project.DefaultModelInheritanceAssembler</implementation>
1.3 +2 -0 maven-components/maven-project/src/main/java/org/apache/maven/artifact/MavenArtifact.java
Index: MavenArtifact.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/MavenArtifact.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MavenArtifact.java 22 Mar 2004 00:11:14 -0000 1.2
+++ MavenArtifact.java 8 May 2004 12:19:22 -0000 1.3
@@ -43,6 +43,8 @@
boolean exists();
File getFile();
+
+ File getFile( String localRepository );
String getExtension();
}
1.4 +15 -2 maven-components/maven-project/src/main/java/org/apache/maven/artifact/AbstractMavenArtifact.java
Index: AbstractMavenArtifact.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/AbstractMavenArtifact.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractMavenArtifact.java 12 Apr 2004 14:41:30 -0000 1.3
+++ AbstractMavenArtifact.java 8 May 2004 12:19:22 -0000 1.4
@@ -19,8 +19,7 @@
import org.apache.maven.model.Dependency;
import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
+
public abstract class AbstractMavenArtifact
implements MavenArtifact
@@ -119,6 +118,10 @@
return getDependency().getArtifact();
}
+ /**
+ * @todo see comments added to getFile() method
+ * @see org.apache.maven.artifact.MavenArtifact#exists()
+ */
public boolean exists()
{
return getFile().exists();
@@ -129,11 +132,21 @@
return getDependency().getArtifact().indexOf( "SNAPSHOT" ) > 0;
}
+ /**
+ * @todo What for this method exits? getPath() returns realative path.
+ * We need somehow append a path to local repository
+ * @see org.apache.maven.artifact.MavenArtifact#getFile()
+ */
public File getFile()
{
return new File( getPath() );
}
+ public File getFile( String localRepository )
+ {
+ return new File( localRepository, getPath() );
+ }
+
public String getExtension()
{
return dependency.getType();
1.1 maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
Index: DefaultArtifactResolver.java
===================================================================
package org.apache.maven.artifact.resolver;
import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.artifact.factory.MavenArtifactFactory;
import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
/**
* @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
* @version $Id: DefaultArtifactResolver.java,v 1.1 2004/05/08 12:19:22 michal Exp $
*/
public class DefaultArtifactResolver implements ArtifactResolver
{
/**
* @requirement
*/
MavenArtifactFactory artifactFactory;
public MavenArtifact getArtifact( Dependency dependency, MavenProject project )
{
MavenArtifact retValue = artifactFactory.createArtifact( dependency );
String localRepository = project.getLocalRepository();
if ( !retValue.getFile( localRepository ).exists() )
{
//here we can try to fetch artifact using wagon
retValue = null;
}
return retValue;
}
public MavenArtifact getArtifact( Dependency dependency, String type, MavenProject project )
{
Dependency d = new Dependency();
d.setGroupId( dependency.getGroupId( ) );
d.setArtifactId( dependency.getArtifactId( ) );
d.setVersion( dependency.getVersion() );
d.setType( type );
return getArtifact( d, project );
}
}
1.1 maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
Index: ArtifactResolver.java
===================================================================
package org.apache.maven.artifact.resolver;
import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
/**
*
* I want to use it for hidding the fact that sometime artifact must
* be downloaded. I am just asking LocalRepository for given artifact
* and I don't care if it is alredy there or how it will get there.
*
*
* @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
* @version $Id: ArtifactResolver.java,v 1.1 2004/05/08 12:19:22 michal Exp $
*/
public interface ArtifactResolver
{
String ROLE = ArtifactResolver.class.getName();
MavenArtifact getArtifact( Dependency dependency, MavenProject project );
MavenArtifact getArtifact( Dependency dependency, String type, MavenProject project );
}
1.3 +7 -0 maven-components/maven-project/src/test/java/org/apache/maven/project/RecursiveProjectInheritanceTest.java
Index: RecursiveProjectInheritanceTest.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/RecursiveProjectInheritanceTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RecursiveProjectInheritanceTest.java 16 Apr 2004 18:05:06 -0000 1.2
+++ RecursiveProjectInheritanceTest.java 8 May 2004 12:19:22 -0000 1.3
@@ -7,6 +7,13 @@
public class RecursiveProjectInheritanceTest
extends AbstractProjectTestCase
{
+
+
+ public RecursiveProjectInheritanceTest( String testName )
+ {
+ super( testName );
+ }
+
// ------------------------------------------------------------------------
// Recursive Property Inheritance
// ------------------------------------------------------------------------
1.3 +6 -0 maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectReactorTest.java
Index: ProjectReactorTest.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectReactorTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ProjectReactorTest.java 19 Apr 2004 13:04:40 -0000 1.2
+++ ProjectReactorTest.java 8 May 2004 12:19:22 -0000 1.3
@@ -9,6 +9,12 @@
public class ProjectReactorTest
extends AbstractProjectTestCase
{
+
+ public ProjectReactorTest( String testName )
+ {
+ super( testName );
+ }
+
public void testProjectReactor()
throws Exception
{
1.3 +14 -0 maven-components/maven-project/src/test/java/org/apache/maven/project/AbstractProjectTestCase.java
Index: AbstractProjectTestCase.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/AbstractProjectTestCase.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractProjectTestCase.java 19 Apr 2004 13:04:40 -0000 1.2
+++ AbstractProjectTestCase.java 8 May 2004 12:19:22 -0000 1.3
@@ -7,6 +7,13 @@
{
protected MavenProjectBuilder projectBuilder;
+ private String localRepository = System.getProperty( "basedir" ) + "/src/test/resources/maven-repo-local";
+
+ public AbstractProjectTestCase( String testName )
+ {
+ super( testName );
+ }
+
public void setUp()
throws Exception
{
@@ -16,4 +23,11 @@
assertNotNull( "Test projectBuilder can't be null!", projectBuilder );
}
+
+ public String getLocalRepository()
+ {
+ return localRepository;
+ }
+
+
}
1.9 +7 -0 maven-components/maven-project/src/test/java/org/apache/maven/project/DefaultProjectBuilderTest.java
Index: DefaultProjectBuilderTest.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/DefaultProjectBuilderTest.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- DefaultProjectBuilderTest.java 19 Apr 2004 13:04:40 -0000 1.8
+++ DefaultProjectBuilderTest.java 8 May 2004 12:19:22 -0000 1.9
@@ -10,7 +10,14 @@
public class DefaultProjectBuilderTest
extends AbstractProjectTestCase
+
{
+
+ public DefaultProjectBuilderTest( String testName )
+ {
+ super( testName );
+ }
+
private String dir = "src/test/resources/projects/";
public void testDefaultsPropertiesExtraction()
1.3 +9 -1 maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectBaseDirectoryAlignmentTest.java
Index: ProjectBaseDirectoryAlignmentTest.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/ProjectBaseDirectoryAlignmentTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ProjectBaseDirectoryAlignmentTest.java 16 Apr 2004 17:56:37 -0000 1.2
+++ ProjectBaseDirectoryAlignmentTest.java 8 May 2004 12:19:22 -0000 1.3
@@ -8,8 +8,16 @@
public class ProjectBaseDirectoryAlignmentTest
extends AbstractProjectTestCase
{
- private String dir = "src/test/resources/projects/base-directory-alignment/";
+
+
+ private String dir = "src/test/resources/projects/base-directory-alignment/";
+
+ public ProjectBaseDirectoryAlignmentTest( String testName )
+ {
+ super( testName );
+ }
+
public void testProjectDirectoryBaseDirectoryAlignment()
throws Exception
{
1.5 +27 -2 maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
Index: MavenProject.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/project/MavenProject.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- MavenProject.java 17 Apr 2004 15:14:17 -0000 1.4
+++ MavenProject.java 8 May 2004 12:19:22 -0000 1.5
@@ -140,7 +140,7 @@
}
/**
- * Returnn base dir for this project
+ * Returns base dir for this project
*/
public File getBasedir()
{
@@ -685,6 +685,8 @@
*
* @param id
* @return
+ *
+ * @todo (michal)do we still need this?
*/
public static String legacyToStandardId( String id )
{
@@ -860,6 +862,29 @@
}
return false;
+ }
+
+ /**
+ * @todo create something like MavenContants class and put "maven.repo.local"
+ *
+ * @todo In fact I am not sure if this object should be used for accessing the information
+ * where maven local repository is. There should be only one local repository and it
+ * should be shared between all projects. Probably we can have a component like
+ * MavenEnvinromnent which will contain all behavioral settings shared between projects.
+ * This component can read on the startup ${user.home}/build.properties file
+ *
+ *
+ * there
+ * @return
+ */
+ public String getLocalRepository()
+ {
+ return getProperty( "maven.repo.local" );
+ }
+
+ public void setLocalRepository( String path )
+ {
+ properties.put( "maven.repo.local", path );
}
}
1.12 +0 -1 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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DefaultMavenProjectBuilder.java 12 Apr 2004 14:41:30 -0000 1.11
+++ DefaultMavenProjectBuilder.java 8 May 2004 12:19:22 -0000 1.12
@@ -37,7 +37,6 @@
import org.apache.maven.model.Parent;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
-import org.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.manager.WagonManager;
import org.codehaus.plexus.logging.AbstractLogEnabled;
1.2 +3 -0 maven-components/maven-project/src/main/java/org/apache/maven/artifact/satisfier/DefaultArtifactSatisfier.java
Index: DefaultArtifactSatisfier.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/satisfier/DefaultArtifactSatisfier.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultArtifactSatisfier.java 5 Apr 2004 17:23:56 -0000 1.1
+++ DefaultArtifactSatisfier.java 8 May 2004 12:19:23 -0000 1.2
@@ -144,8 +144,11 @@
for ( Iterator i = failedDependencies.iterator(); i.hasNext(); )
{
MavenArtifact artifact = (MavenArtifact) i.next();
+
message.append( artifact.getName() );
+
String url = artifact.getDependency().getUrl();
+
if ( StringUtils.isNotEmpty( url ) )
{
// FIXME: internationalize
1.1 maven-components/maven-project/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java
Index: DefaultArtifactResolverTest.java
===================================================================
package org.apache.maven.artifact.resolver;
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.File;
import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.model.Dependency;
import org.apache.maven.project.AbstractProjectTestCase;
import org.apache.maven.project.MavenProject;
/**
*
* @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
* @version $Id: DefaultArtifactResolverTest.java,v 1.1 2004/05/08 12:19:23 michal Exp $
*/
public class DefaultArtifactResolverTest
extends AbstractProjectTestCase
{
public DefaultArtifactResolverTest( String testName )
{
super( testName );
}
private ArtifactResolver artifactResolver;
public void setUp() throws Exception
{
super.setUp();
artifactResolver = ( ArtifactResolver ) lookup( ArtifactResolver.ROLE );
assertNotNull( "Test artifactResolver can't be null!", artifactResolver );
}
public void testArtifactResolving( )
{
File f = new File( getLocalRepository(), "/maven-test/poms/maven-test-a-1.0.pom" );
assertTrue( "Test file: '" + f.getAbsolutePath() + "' doesn't exist!", f.exists() );
try
{
MavenProject project = projectBuilder.build( f );
assertNotNull( "Project is null", project );
project.setLocalRepository( getLocalRepository() );
Dependency dependency = new Dependency();
dependency.setGroupId( "maven-test" );
dependency.setArtifactId( "maven-test-a" );
dependency.setVersion( "1.0" );
dependency.setType( "jar" );
MavenArtifact a_1 = artifactResolver.getArtifact( dependency, project );
assertNotNull( "Artifact " + dependency.toString() + " should exists" , a_1 );
dependency.setType( "foo" );
MavenArtifact a_2 = artifactResolver.getArtifact( dependency, project );
assertNull( a_2 );
}
catch ( Exception e )
{
e.printStackTrace();
fail( e.getMessage() );
}
}
}
1.2 +150 -86 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultArtifactCollector.java 4 Apr 2004 17:20:14 -0000 1.1
+++ DefaultArtifactCollector.java 8 May 2004 12:19:23 -0000 1.2
@@ -1,130 +1,194 @@
package org.apache.maven.artifact.collector;
-import org.apache.maven.artifact.MavenArtifact;
-import org.apache.maven.artifact.WagonArtifactAdapter;
-import org.apache.maven.artifact.factory.MavenArtifactFactory;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.wagon.manager.WagonManager;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
-public class DefaultArtifactCollector
- extends AbstractLogEnabled
- implements ArtifactCollector
+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;
+
+/**
+ *
+ * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
+ * @version $Id$
+ */
+public class DefaultArtifactCollector implements ArtifactCollector
{
- private MavenArtifactFactory artifactFactory;
- private MavenProjectBuilder builder;
+ /**
+ * @requirement
+ */
+ private ArtifactResolver artifactResolver;
+
+ /**
+ *
+ * @requirement
+ */
+ private MavenProjectBuilder projectBuilder;
+
+ /**
+ * @see org.apache.maven.artifact.collector.ArtifactCollector#getArtifacts(org.apache.maven.project.MavenProject)
+ */
+ public ArtifactCollectionResult getArtifacts( MavenProject project )
+ throws Exception
+ {
- private WagonManager wagonManager;
+ ArtifactCollectionResult retValue = new ArtifactCollectionResult();
- public ArtifactCollectionResult getArtifacts( MavenProject project ) throws Exception
- {
- ArtifactCollectionResult cr = new ArtifactCollectionResult();
+ resolveDependencies( project, retValue );
- resolveDependencies( project, cr );
+ return retValue;
- return cr;
}
- void resolveDependencies( MavenProject project, ArtifactCollectionResult cr )
- throws Exception
+ void resolveDependencies( MavenProject project,
+ ArtifactCollectionResult result ) throws Exception
{
- if ( project == null )
- {
- return;
- }
- for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+ // I want to use BSF not DFS
+ //so the artifact of top level project are always processed in first place
+
+
+ // linked list - we will have a lot add/remove operation
+ List queue = new LinkedList();
+
+ queue.add( project );
+
+ System.out.println( "size: " + queue.size() );
+
+ while ( !queue.isEmpty() )
{
- MavenArtifact artifact = (MavenArtifact) i.next();
-
- String key = artifact.getDependency().getId();
- if ( cr.getArtifacts().containsKey( key ) )
+ MavenProject currentProject = ( MavenProject ) queue.remove( 0 );
+
+
+ for ( Iterator i = currentProject.getArtifacts().iterator(); i.hasNext(); )
{
- MavenArtifact a = (MavenArtifact) cr.getArtifacts().get( key );
+ MavenArtifact newArtifact = ( MavenArtifact ) i.next();
- String newVersion = artifact.getDependency().getVersion();
+ String id = newArtifact.getDependency().getId();
+
+
+
+ if ( result.getArtifacts().containsKey( id ) )
+ {
+ MavenArtifact knownArtifact = ( MavenArtifact ) result
+ .getArtifacts().get( id );
- String knownVersion = a.getDependency().getVersion();
+ String newVersion = newArtifact.getDependency()
+ .getVersion();
- if ( newVersion.equals( knownVersion ) )
- {
- continue;
+ 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 ( result.getConflicts().containsKey( id ) )
+ {
+ list = ( List ) result.getConflicts().get( id );
+ }
+ else
+ {
+ list = new ArrayList();
+
+ list.add( knownArtifact );
+
+ result.getConflicts().put( id, list );
+ }
+
+
+ list.add( newArtifact );
+ }
}
else
{
- // 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;
- //}
+ //It's the first time we have encountered this artifact
+
+ // Add the dependency itself
+ result.getArtifacts().put( id, newArtifact );
- List list;
+ MavenProject childProject = getProject( newArtifact.getDependency(),
+ currentProject );
- if ( cr.getConflicts().containsKey( key ) )
+
+ if ( childProject == null )
{
- list = (List) cr.getConflicts().get( key );
+ // the pom for this artifact is not present in local repository.
+ // we will note this fact
+ result.getArtifactsWithoutPoms().put( id, newArtifact );
+
+ continue;
}
else
{
- list = new ArrayList();
+ //@hack for testing I need to propagate the location of mavenRepoLocal
+ //this shows that some settings should be detached from project.
+
+ childProject.setLocalRepository( currentProject.getLocalRepository() );
+
+
+
}
+
- list.add( newVersion );
- }
- }
- else
- {
-
- // Add the dependency itself
- cr.getArtifacts().put( key, artifact );
- }
-
- // Now find the artifacts for each of the artifacts.
- MavenProject p = findPom( artifact );
+ // the pom for given dependency exisit we will enqueue it
+ queue.add( childProject );
- if ( p == null )
- {
- cr.getArtifactsWithoutPoms().put( artifact.getDependency().getId(), artifact );
+ }
- continue;
}
-
- resolveDependencies( findPom( artifact ), cr );
}
+
}
- MavenProject findPom( MavenArtifact artifact ) throws Exception
+ /**
+ * @param pomArtifact
+ * @return
+ */
+ private MavenProject getProject( Dependency dependency, MavenProject project )
+ throws Exception
{
- //!!! Need to create a POM artifact
- MavenArtifact pomArtifact = artifactFactory.createArtifact( artifact.getDependency() );
-
- if ( !pomArtifact.exists() )
- {
- try
- {
- wagonManager.getWagon( "http" ).get( new WagonArtifactAdapter( pomArtifact ), null );
- }
- catch ( Exception e )
- {
- return null;
- }
- }
-
- MavenProject project = null;
-
- if ( pomArtifact.exists() )
+
+ MavenProject retValue = null;
+
+ MavenArtifact pomArtifact = artifactResolver.getArtifact( dependency, "pom", project );
+
+ if ( pomArtifact != null )
{
- project = builder.build( pomArtifact.getFile() );
+ try
+ {
+ retValue = projectBuilder.build( pomArtifact.getFile( project.getLocalRepository() ) );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw new Exception( "POM for dependency: " + dependency
+ + " exists in local repository but cannot be parsed", e );
+ }
}
+
+ return retValue;
- return project;
}
-}
+}
\ No newline at end of file
1.2 +5 -1 maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollector.java
Index: ArtifactCollector.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/collector/ArtifactCollector.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ArtifactCollector.java 4 Apr 2004 17:20:14 -0000 1.1
+++ ArtifactCollector.java 8 May 2004 12:19:23 -0000 1.2
@@ -1,9 +1,13 @@
package org.apache.maven.artifact.collector;
-import java.util.Map;
import org.apache.maven.project.MavenProject;
+/**
+ * @author <a href="mailto:jvanzyl@maven.org">Jason van Zyl</a>
+ * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
+ * @version $Id$
+ */
public interface ArtifactCollector
{
String ROLE = ArtifactCollector.class.getName();
1.2 +9 -1 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ArtifactCollectionResult.java 4 Apr 2004 17:20:14 -0000 1.1
+++ ArtifactCollectionResult.java 8 May 2004 12:19:23 -0000 1.2
@@ -9,12 +9,20 @@
*/
public class ArtifactCollectionResult
{
+ /** Map<String,MavenArtifact> */
private Map artifacts;
+
+ /**
+ * Map<String,List<String>>
+ *
+ */
private Map conflicts;
+ /** Map<String,MavenArtifact> */
private Map artifactsWithoutPoms;
+
public ArtifactCollectionResult()
{
artifacts = new HashMap();
1.2 +1 -1 maven-components/maven-project/src/main/java/org/apache/maven/artifact/factory/DefaultMavenArtifactFactory.java
Index: DefaultMavenArtifactFactory.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/factory/DefaultMavenArtifactFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultMavenArtifactFactory.java 4 Apr 2004 17:20:14 -0000 1.1
+++ DefaultMavenArtifactFactory.java 8 May 2004 12:19:23 -0000 1.2
@@ -34,7 +34,7 @@
{
List projectArtifacts = new ArrayList();
- String mavenRepoLocal = project.getProperty( "maven.repo.local" );
+ String mavenRepoLocal = project.getLocalRepository();
boolean mavenJarOverride = project.getBooleanProperty( "maven.jar.override" );
1.1 maven-components/maven-project/src/test/java/org/apache/maven/artifact/collector/DefaultArtifactCollectorTest.java
Index: DefaultArtifactCollectorTest.java
===================================================================
package org.apache.maven.artifact.collector;
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.File;
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;
/**
*
* @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
* @version $Id: DefaultArtifactCollectorTest.java,v 1.1 2004/05/08 12:19:23 michal Exp $
*/
public class DefaultArtifactCollectorTest
extends AbstractProjectTestCase
{
private ArtifactCollector artifactCollector;
public DefaultArtifactCollectorTest( String testName )
{
super( testName );
}
public void setUp() throws Exception
{
super.setUp();
artifactCollector = ( ArtifactCollector ) lookup( ArtifactCollector.ROLE );
assertNotNull( "Test artifactCollector can't be null!", artifactCollector );
System.out.println( "local repo:" + getLocalRepository() );
}
public void testArtifactCollecting( )
{
File f = new File( getLocalRepository(), "/maven-test/poms/maven-test-a-1.0.pom" );
assertTrue( "Test file: '" + f.getAbsolutePath() + "' doesn't exist!", f.exists() );
try
{
MavenProject project = projectBuilder.build( f );
assertNotNull( "Project is null", project );
project.setLocalRepository( getLocalRepository() );
ArtifactCollectionResult result = artifactCollector.getArtifacts( project );
Map artifacts = result.getArtifacts();
Map conflicts = result.getConflicts();
Map artifactsWithoutPoms = result.getArtifactsWithoutPoms();
// [d 1.1]
// |
// [a] -- > [b] --[c] -- [d 1.2]
// | |
// |---------------------- > [z] (no pom)
assertTrue( artifacts.containsKey( "maven-test:maven-test-b" ) );
assertTrue( artifacts.containsKey( "maven-test:maven-test-c" ) );
assertTrue( artifacts.containsKey( "maven-test:maven-test-d" ) );
assertTrue( artifacts.containsKey( "maven-test:maven-test-z" ) );
assertTrue( artifactsWithoutPoms.containsKey( "maven-test:maven-test-z" ) );
assertEquals( 1, conflicts.size() );
assertTrue( conflicts.containsKey( "maven-test:maven-test-d" ) );
List conflictsForD = ( List ) conflicts.get( "maven-test:maven-test-d" );
assertEquals( 2,conflictsForD.size() );
MavenArtifact d_1_1 = ( MavenArtifact ) conflictsForD.get( 0 );
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 )
{
e.printStackTrace();
fail( e.getMessage() );
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org