You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/06/22 08:46:27 UTC
svn commit: r191773 - in /maven/components/trunk:
maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/
maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/
maven-artifact/src/main/java/org/apache/maven/artifact/factory/ m...
Author: brett
Date: Tue Jun 21 23:46:26 2005
New Revision: 191773
URL: http://svn.apache.org/viewcvs?rev=191773&view=rev
Log:
simplify the resolveTransitively API, and implement the new collector up to the level of functionality of the original.
Added:
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/LegacyArtifactCollector.java
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java
Modified:
maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
Modified: maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java (original)
+++ maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java Tue Jun 21 23:46:26 2005
@@ -88,7 +88,7 @@
pom = createDummyPom();
}
- Set artifacts = metadataSource.createArtifacts( dependencies, null, null );
+ Set artifacts = MavenMetadataSource.createArtifacts( artifactFactory, dependencies, null, null );
log( "Resolving dependencies..." );
Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Tue Jun 21 23:46:26 2005
@@ -31,7 +31,6 @@
import org.codehaus.plexus.logging.Logger;
import java.io.File;
-import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -128,23 +127,6 @@
throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
}
}
- }
-
- public ArtifactResolutionResult resolveTransitively( Artifact artifact, List remoteRepositories,
- ArtifactRepository localRepository,
- ArtifactMetadataSource source )
- throws ArtifactResolutionException
- {
- return resolveTransitively( artifact, remoteRepositories, localRepository, source, null );
- }
-
- public ArtifactResolutionResult resolveTransitively( Artifact artifact, List remoteRepositories,
- ArtifactRepository localRepository,
- ArtifactMetadataSource source, ArtifactFilter filter )
- throws ArtifactResolutionException
- {
- return resolveTransitively( Collections.singleton( artifact ), null, remoteRepositories, localRepository,
- source, filter );
}
public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact,
Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java Tue Jun 21 23:46:26 2005
@@ -56,7 +56,7 @@
private Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type,
String classifier, String inheritedScope )
{
- // TODO: can refactor, use scope handler
+ // TODO: can refactor - inherited scope calculation belongs in the collector, use scope handler
String desiredScope = Artifact.SCOPE_RUNTIME;
if ( inheritedScope == null )
Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java Tue Jun 21 23:46:26 2005
@@ -38,4 +38,10 @@
List remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter,
ArtifactFactory artifactFactory )
throws ArtifactResolutionException;
+
+ ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Set managedVersions,
+ ArtifactRepository localRepository, List remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ ArtifactFactory artifactFactory )
+ throws ArtifactResolutionException;
}
Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java Tue Jun 21 23:46:26 2005
@@ -39,15 +39,6 @@
void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
throws ArtifactResolutionException;
- ArtifactResolutionResult resolveTransitively( Artifact artifact, List remoteRepositories,
- ArtifactRepository localRepository, ArtifactMetadataSource source )
- throws ArtifactResolutionException;
-
- ArtifactResolutionResult resolveTransitively( Artifact artifact, List remoteRepositories,
- ArtifactRepository localRepository, ArtifactMetadataSource source,
- ArtifactFilter filter )
- throws ArtifactResolutionException;
-
ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, List remoteRepositories,
ArtifactRepository localRepository, ArtifactMetadataSource source )
throws ArtifactResolutionException;
Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java Tue Jun 21 23:46:26 2005
@@ -23,13 +23,14 @@
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.HashSet;
/**
* Default implementation of the artifact collector.
@@ -46,112 +47,209 @@
ArtifactFactory artifactFactory )
throws ArtifactResolutionException
{
- ArtifactResolutionResult result = new ArtifactResolutionResult();
+ return collect( artifacts, originatingArtifact, Collections.EMPTY_SET, localRepository, remoteRepositories,
+ source, filter, artifactFactory );
+ }
+ public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Set managedVersions,
+ ArtifactRepository localRepository, List remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ ArtifactFactory artifactFactory )
+ throws ArtifactResolutionException
+ {
Map resolvedArtifacts = new HashMap();
- List queue = new LinkedList();
+ ResolutionNode root = new ResolutionNode( originatingArtifact );
+ root.addDependencies( artifacts, filter );
+
+ recurse( root, resolvedArtifacts, localRepository, remoteRepositories, source, filter, artifactFactory );
- queue.add( artifacts );
+ Set set = new HashSet();
- while ( !queue.isEmpty() )
+ for ( Iterator i = resolvedArtifacts.values().iterator(); i.hasNext(); )
{
- Set currentArtifacts = (Set) queue.remove( 0 );
+ ResolutionNode node = (ResolutionNode) i.next();
+ if ( node != root )
+ {
+ set.add( node.getArtifact() );
+ }
+ }
+
+ ArtifactResolutionResult result = new ArtifactResolutionResult();
- for ( Iterator i = currentArtifacts.iterator(); i.hasNext(); )
+ result.setArtifacts( set );
+
+ return result;
+ }
+
+ private void recurse( ResolutionNode node, Map resolvedArtifacts, ArtifactRepository localRepository,
+ List remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter,
+ ArtifactFactory artifactFactory )
+ throws ArtifactResolutionException
+ {
+ ResolutionNode previous = (ResolutionNode) resolvedArtifacts.get( node.getKey() );
+ if ( previous != null )
+ {
+ // TODO: conflict resolvers
+
+ // previous one is more dominant
+ if ( previous.getDepth() <= node.getDepth() )
{
- Artifact newArtifact = (Artifact) i.next();
+ boolean updateScope = false;
+ Artifact newArtifact = node.getArtifact();
+ Artifact previousArtifact = previous.getArtifact();
+
+ if ( Artifact.SCOPE_RUNTIME.equals( newArtifact.getScope() ) &&
+ ( Artifact.SCOPE_TEST.equals( previousArtifact.getScope() ) ||
+ Artifact.SCOPE_PROVIDED.equals( previousArtifact.getScope() ) ) )
+ {
+ updateScope = true;
+ }
- String id = newArtifact.getDependencyConflictId();
+ if ( Artifact.SCOPE_COMPILE.equals( newArtifact.getScope() ) &&
+ !Artifact.SCOPE_COMPILE.equals( previousArtifact.getScope() ) )
+ {
+ updateScope = true;
+ }
- if ( resolvedArtifacts.containsKey( id ) )
+ if ( updateScope )
{
- Artifact knownArtifact = (Artifact) resolvedArtifacts.get( id );
+ Artifact artifact = artifactFactory.createArtifact( previousArtifact.getGroupId(),
+ previousArtifact.getArtifactId(),
+ previousArtifact.getVersion(),
+ newArtifact.getScope(),
+ previousArtifact.getType() );
+ // TODO: can I just change the scope?
+ previous.setArtifact( artifact );
+ }
- String newVersion = newArtifact.getVersion();
-
- String knownVersion = knownArtifact.getVersion();
-
- if ( !newVersion.equals( knownVersion ) )
- {
- addConflict( result, knownArtifact, newArtifact );
- }
-
- // TODO: scope handler
- boolean updateScope = false;
- if ( Artifact.SCOPE_RUNTIME.equals( newArtifact.getScope() ) &&
- Artifact.SCOPE_TEST.equals( knownArtifact.getScope() ) )
- {
- updateScope = true;
- }
-
- if ( Artifact.SCOPE_COMPILE.equals( newArtifact.getScope() ) &&
- !Artifact.SCOPE_COMPILE.equals( knownArtifact.getScope() ) )
- {
- updateScope = true;
- }
-
- if ( updateScope )
- {
- Artifact artifact = artifactFactory.createArtifact( knownArtifact.getGroupId(),
- knownArtifact.getArtifactId(), knownVersion,
- newArtifact.getScope(),
- knownArtifact.getType() );
- resolvedArtifacts.put( artifact.getDependencyConflictId(), artifact );
- }
- }
- else
- {
- // ----------------------------------------------------------------------
- // It's the first time we have encountered this artifact
- // ----------------------------------------------------------------------
-
- if ( filter != null && !filter.include( newArtifact ) )
- {
- continue;
- }
-
- resolvedArtifacts.put( id, newArtifact );
-
- Set referencedDependencies = null;
-
- try
- {
- referencedDependencies = source.retrieve( newArtifact, localRepository, remoteRepositories );
- }
- catch ( ArtifactMetadataRetrievalException e )
- {
- throw new TransitiveArtifactResolutionException( e.getMessage(), newArtifact,
- remoteRepositories, e );
- }
-
- // the pom for given dependency exisit we will add it to the
- // queue
- queue.add( referencedDependencies );
+ return;
+ }
+ else
+ {
+ boolean updateScope = false;
+ Artifact previousArtifact = previous.getArtifact();
+ Artifact newArtifact = node.getArtifact();
+
+ if ( Artifact.SCOPE_RUNTIME.equals( previousArtifact.getScope() ) &&
+ ( Artifact.SCOPE_TEST.equals( newArtifact.getScope() ) ||
+ Artifact.SCOPE_PROVIDED.equals( newArtifact.getScope() ) ) )
+ {
+ updateScope = true;
}
+
+ if ( Artifact.SCOPE_COMPILE.equals( previousArtifact.getScope() ) &&
+ !Artifact.SCOPE_COMPILE.equals( newArtifact.getScope() ) )
+ {
+ updateScope = true;
+ }
+
+ if ( updateScope )
+ {
+ Artifact artifact = artifactFactory.createArtifact( newArtifact.getGroupId(),
+ newArtifact.getArtifactId(),
+ newArtifact.getVersion(),
+ previousArtifact.getScope(),
+ newArtifact.getType() );
+ // TODO: can I just change the scope?
+ node.setArtifact( artifact );
+ }
+
}
}
- result.setArtifacts( new HashSet( resolvedArtifacts.values() ) );
+ resolvedArtifacts.put( node.getKey(), node );
- return result;
+ for ( Iterator i = node.getChildrenIterator(); i.hasNext(); )
+ {
+ ResolutionNode child = (ResolutionNode) i.next();
+ if ( !child.isResolved() )
+ {
+ try
+ {
+ Set artifacts = source.retrieve( child.getArtifact(), localRepository, remoteRepositories );
+ child.addDependencies( artifacts, filter );
+ }
+ catch ( ArtifactMetadataRetrievalException e )
+ {
+ throw new TransitiveArtifactResolutionException( e.getMessage(), child.getArtifact(),
+ remoteRepositories, e );
+ }
+
+ recurse( child, resolvedArtifacts, localRepository, remoteRepositories, source, filter,
+ artifactFactory );
+ }
+ }
}
- private void addConflict( ArtifactResolutionResult result, Artifact knownArtifact, Artifact newArtifact )
+
+ private static class ResolutionNode
{
- List conflicts;
+ private Artifact artifact;
- conflicts = (List) result.getConflicts().get( newArtifact.getDependencyConflictId() );
+ private final ResolutionNode parent;
- if ( conflicts == null )
+ private List children = null;
+
+ private final int depth;
+
+ public ResolutionNode( Artifact artifact )
+ {
+ this.artifact = artifact;
+ this.parent = null;
+ this.depth = 0;
+ }
+
+ public ResolutionNode( Artifact artifact, ResolutionNode parent )
{
- conflicts = new LinkedList();
+ this.artifact = artifact;
+ this.parent = parent;
+ this.depth = parent.depth + 1;
+ }
- conflicts.add( knownArtifact );
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
- result.getConflicts().put( newArtifact.getDependencyConflictId(), conflicts );
+ public Object getKey()
+ {
+ return artifact.getDependencyConflictId();
}
- conflicts.add( newArtifact );
+ public void addDependencies( Set artifacts, ArtifactFilter filter )
+ {
+ children = new ArrayList( artifacts.size() );
+
+ for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+ {
+ Artifact a = (Artifact) i.next();
+
+ if ( filter == null || filter.include( a ) )
+ {
+ children.add( new ResolutionNode( a, this ) );
+ }
+ }
+ }
+
+ public boolean isResolved()
+ {
+ return children != null;
+ }
+
+ public Iterator getChildrenIterator()
+ {
+ return children.iterator();
+ }
+
+ public int getDepth()
+ {
+ return depth;
+ }
+
+ public void setArtifact( Artifact artifact )
+ {
+ this.artifact = artifact;
+ }
}
}
Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/LegacyArtifactCollector.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/LegacyArtifactCollector.java?rev=191773&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/LegacyArtifactCollector.java (added)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/LegacyArtifactCollector.java Tue Jun 21 23:46:26 2005
@@ -0,0 +1,169 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Copyright 2001-2005 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 org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Previous implementation of the artifact collector.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id: DefaultArtifactCollector.java 191748 2005-06-22 00:31:33Z brett $
+ * @deprecated
+ */
+public class LegacyArtifactCollector
+ implements ArtifactCollector
+{
+ public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository, List remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ ArtifactFactory artifactFactory )
+ throws ArtifactResolutionException
+ {
+ return collect( artifacts, originatingArtifact, Collections.EMPTY_SET, localRepository, remoteRepositories,
+ source, filter, artifactFactory );
+ }
+
+ public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Set managedVersions,
+ ArtifactRepository localRepository, List remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ ArtifactFactory artifactFactory )
+ throws ArtifactResolutionException
+ {
+ ArtifactResolutionResult result = new ArtifactResolutionResult();
+
+ Map resolvedArtifacts = new HashMap();
+
+ List queue = new LinkedList();
+
+ queue.add( artifacts );
+
+ while ( !queue.isEmpty() )
+ {
+ Set currentArtifacts = (Set) queue.remove( 0 );
+
+ for ( Iterator i = currentArtifacts.iterator(); i.hasNext(); )
+ {
+ Artifact newArtifact = (Artifact) i.next();
+
+ String id = newArtifact.getDependencyConflictId();
+
+ if ( resolvedArtifacts.containsKey( id ) )
+ {
+ Artifact knownArtifact = (Artifact) resolvedArtifacts.get( id );
+
+ String newVersion = newArtifact.getVersion();
+
+ String knownVersion = knownArtifact.getVersion();
+
+ if ( !newVersion.equals( knownVersion ) )
+ {
+ addConflict( result, knownArtifact, newArtifact );
+ }
+
+ // TODO: scope handler
+ boolean updateScope = false;
+ if ( Artifact.SCOPE_RUNTIME.equals( newArtifact.getScope() ) &&
+ Artifact.SCOPE_TEST.equals( knownArtifact.getScope() ) )
+ {
+ updateScope = true;
+ }
+
+ if ( Artifact.SCOPE_COMPILE.equals( newArtifact.getScope() ) &&
+ !Artifact.SCOPE_COMPILE.equals( knownArtifact.getScope() ) )
+ {
+ updateScope = true;
+ }
+
+ if ( updateScope )
+ {
+ Artifact artifact = artifactFactory.createArtifact( knownArtifact.getGroupId(),
+ knownArtifact.getArtifactId(), knownVersion,
+ newArtifact.getScope(),
+ knownArtifact.getType() );
+ resolvedArtifacts.put( artifact.getDependencyConflictId(), artifact );
+ }
+ }
+ else
+ {
+ // ----------------------------------------------------------------------
+ // It's the first time we have encountered this artifact
+ // ----------------------------------------------------------------------
+
+ if ( filter != null && !filter.include( newArtifact ) )
+ {
+ continue;
+ }
+
+ resolvedArtifacts.put( id, newArtifact );
+
+ Set referencedDependencies = null;
+
+ try
+ {
+ referencedDependencies = source.retrieve( newArtifact, localRepository, remoteRepositories );
+ }
+ catch ( ArtifactMetadataRetrievalException e )
+ {
+ throw new TransitiveArtifactResolutionException( e.getMessage(), newArtifact,
+ remoteRepositories, e );
+ }
+
+ // the pom for given dependency exisit we will add it to the
+ // queue
+ queue.add( referencedDependencies );
+ }
+ }
+ }
+
+ result.setArtifacts( new HashSet( resolvedArtifacts.values() ) );
+
+ return result;
+ }
+
+ private void addConflict( ArtifactResolutionResult result, Artifact knownArtifact, Artifact newArtifact )
+ {
+ List conflicts;
+
+ conflicts = (List) result.getConflicts().get( newArtifact.getDependencyConflictId() );
+
+ if ( conflicts == null )
+ {
+ conflicts = new LinkedList();
+
+ conflicts.add( knownArtifact );
+
+ result.getConflicts().put( newArtifact.getDependencyConflictId(), conflicts );
+ }
+
+ conflicts.add( newArtifact );
+ }
+}
Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java?rev=191773&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java (added)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java Tue Jun 21 23:46:26 2005
@@ -0,0 +1,29 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+* Copyright 2001-2005 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.
+*/
+
+/**
+ * Describes an artifact version in terms of its components, converts it to/from a string and
+ * compares two versions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public interface ArtifactVersion
+ extends Comparable
+{
+}
Modified: maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java (original)
+++ maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java Tue Jun 21 23:46:26 2005
@@ -21,12 +21,15 @@
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExclusionSetFilter;
import org.codehaus.plexus.PlexusTestCase;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -48,6 +51,8 @@
private Source source;
+ private static final String GROUP_ID = "test";
+
protected void setUp()
throws Exception
{
@@ -57,10 +62,10 @@
this.artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
this.artifactCollector = new DefaultArtifactCollector();
- this.projectArtifact = createArtifact( "project", "1.0" );
+ this.projectArtifact = createArtifact( "project", "1.0", null );
}
- public void testCircularDependencyNotIncludingCurrentProject()
+ public void disabledtestCircularDependencyNotIncludingCurrentProject()
throws ArtifactResolutionException
{
ArtifactSpec a = createArtifact( "a", "1.0" );
@@ -69,7 +74,7 @@
try
{
collect( a );
-// fail( "Should have failed on cyclic dependency not involving project" );
+ fail( "Should have failed on cyclic dependency not involving project" );
}
catch ( CyclicDependencyException expected )
{
@@ -77,7 +82,7 @@
}
}
- public void testCircularDependencyIncludingCurrentProject()
+ public void disabledtestCircularDependencyIncludingCurrentProject()
throws ArtifactResolutionException
{
ArtifactSpec a = createArtifact( "a", "1.0" );
@@ -86,7 +91,7 @@
try
{
collect( a );
-// fail( "Should have failed on cyclic dependency involving project" );
+ fail( "Should have failed on cyclic dependency involving project" );
}
catch ( CyclicDependencyException expected )
{
@@ -94,6 +99,25 @@
}
}
+ public void testResolveWithFilter()
+ throws ArtifactResolutionException
+ {
+ ArtifactSpec a = createArtifact( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c = a.addDependency( "c", "3.0" );
+
+ b.addDependency( "c", "2.0" );
+ ArtifactSpec d = b.addDependency( "d", "4.0" );
+
+ ArtifactResolutionResult res = collect( a );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, b.artifact, c.artifact, d.artifact} ),
+ res.getArtifacts() );
+
+ ArtifactFilter filter = new ExclusionSetFilter( new String[]{"b"} );
+ res = collect( a, filter );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, c.artifact} ), res.getArtifacts() );
+ }
+
public void testResolveNearest()
throws ArtifactResolutionException
{
@@ -104,60 +128,143 @@
b.addDependency( "c", "2.0" );
ArtifactResolutionResult res = collect( a );
- assertEquals( "Check artifact list",
- new HashSet( Arrays.asList( new Object[]{a.artifact, b.artifact, c.artifact} ) ),
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, b.artifact, c.artifact} ),
res.getArtifacts() );
}
+ public void disabledtestResolveManagedVersion()
+ throws ArtifactResolutionException
+ {
+ ArtifactSpec a = createArtifact( "a", "1.0" );
+ a.addDependency( "b", "3.0", Artifact.SCOPE_RUNTIME );
+
+ Artifact managedVersion = createArtifact( "b", "5.0" ).artifact;
+ Artifact modifiedB = createArtifact( "b", "5.0", Artifact.SCOPE_RUNTIME ).artifact;
+
+ ArtifactResolutionResult res = collect( a, managedVersion );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedB} ), res.getArtifacts() );
+ }
+
public void testResolveCompileScopeOverTestScope()
throws ArtifactResolutionException
{
ArtifactSpec a = createArtifact( "a", "1.0" );
- ArtifactSpec b = a.addDependency( "b", "1.0" );
- a.addDependency( "c", "3.0", Artifact.SCOPE_TEST );
+ ArtifactSpec c = createArtifact( "c", "3.0", Artifact.SCOPE_TEST );
- b.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
+ a.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
Artifact modifiedC = createArtifact( "c", "3.0", Artifact.SCOPE_COMPILE ).artifact;
- ArtifactResolutionResult res = collect( a );
- assertEquals( "Check artifact list",
- new HashSet( Arrays.asList( new Object[]{a.artifact, b.artifact, modifiedC} ) ),
- res.getArtifacts() );
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, c.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedC} ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check scope", Artifact.SCOPE_COMPILE, artifact.getScope() );
}
public void testResolveRuntimeScopeOverTestScope()
throws ArtifactResolutionException
{
ArtifactSpec a = createArtifact( "a", "1.0" );
- ArtifactSpec b = a.addDependency( "b", "1.0" );
- a.addDependency( "c", "3.0", Artifact.SCOPE_TEST );
+ ArtifactSpec c = createArtifact( "c", "3.0", Artifact.SCOPE_TEST );
- b.addDependency( "c", "2.0", Artifact.SCOPE_RUNTIME );
+ a.addDependency( "c", "2.0", Artifact.SCOPE_RUNTIME );
Artifact modifiedC = createArtifact( "c", "3.0", Artifact.SCOPE_RUNTIME ).artifact;
- ArtifactResolutionResult res = collect( a );
- assertEquals( "Check artifact list",
- new HashSet( Arrays.asList( new Object[]{a.artifact, b.artifact, modifiedC} ) ),
- res.getArtifacts() );
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, c.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedC} ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check scope", Artifact.SCOPE_RUNTIME, artifact.getScope() );
}
public void testResolveCompileScopeOverRuntimeScope()
throws ArtifactResolutionException
{
ArtifactSpec a = createArtifact( "a", "1.0" );
- ArtifactSpec b = a.addDependency( "b", "1.0" );
- a.addDependency( "c", "3.0", Artifact.SCOPE_RUNTIME );
+ ArtifactSpec c = createArtifact( "c", "3.0", Artifact.SCOPE_RUNTIME );
- b.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
+ a.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
Artifact modifiedC = createArtifact( "c", "3.0", Artifact.SCOPE_COMPILE ).artifact;
- ArtifactResolutionResult res = collect( a );
- assertEquals( "Check artifact list",
- new HashSet( Arrays.asList( new Object[]{a.artifact, b.artifact, modifiedC} ) ),
- res.getArtifacts() );
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, c.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedC} ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check scope", Artifact.SCOPE_COMPILE, artifact.getScope() );
+ }
+
+ public void testResolveCompileScopeOverProvidedScope()
+ throws ArtifactResolutionException
+ {
+ ArtifactSpec a = createArtifact( "a", "1.0" );
+ ArtifactSpec c = createArtifact( "c", "3.0", Artifact.SCOPE_PROVIDED );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
+
+ Artifact modifiedC = createArtifact( "c", "3.0", Artifact.SCOPE_COMPILE ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, c.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedC} ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check scope", Artifact.SCOPE_COMPILE, artifact.getScope() );
+ }
+
+ public void testResolveRuntimeScopeOverProvidedScope()
+ throws ArtifactResolutionException
+ {
+ ArtifactSpec a = createArtifact( "a", "1.0" );
+ ArtifactSpec c = createArtifact( "c", "3.0", Artifact.SCOPE_PROVIDED );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_RUNTIME );
+
+ Artifact modifiedC = createArtifact( "c", "3.0", Artifact.SCOPE_RUNTIME ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, c.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, modifiedC} ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check scope", Artifact.SCOPE_RUNTIME, artifact.getScope() );
+ }
+
+ public void testProvidedScopeNotTransitive()
+ throws ArtifactResolutionException
+ {
+ ArtifactSpec a = createArtifact( "a", "1.0", Artifact.SCOPE_PROVIDED );
+ ArtifactSpec b = createArtifact( "b", "1.0" );
+ b.addDependency( "c", "3.0", Artifact.SCOPE_PROVIDED );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, b.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, b.artifact} ), res.getArtifacts() );
+ }
+
+ public void testTestScopeNotTransitive()
+ throws ArtifactResolutionException
+ {
+ ArtifactSpec a = createArtifact( "a", "1.0", Artifact.SCOPE_TEST );
+ ArtifactSpec b = createArtifact( "b", "1.0" );
+ b.addDependency( "c", "3.0", Artifact.SCOPE_TEST );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[]{a.artifact, b.artifact} ) );
+ assertEquals( "Check artifact list", createSet( new Object[]{a.artifact, b.artifact} ), res.getArtifacts() );
+ }
+
+ private Artifact getArtifact( String id, Set artifacts )
+ {
+ for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+ {
+ Artifact a = (Artifact) i.next();
+ if ( a.getArtifactId().equals( id ) && a.getGroupId().equals( GROUP_ID ) )
+ {
+ return a;
+ }
+ }
+ return null;
+ }
+
+ private ArtifactResolutionResult collect( Set artifacts )
+ throws ArtifactResolutionException
+ {
+ return artifactCollector.collect( artifacts, projectArtifact.artifact, null, null, source, null,
+ artifactFactory );
}
private ArtifactResolutionResult collect( ArtifactSpec a )
@@ -167,19 +274,39 @@
source, null, artifactFactory );
}
+ private ArtifactResolutionResult collect( ArtifactSpec a, ArtifactFilter filter )
+ throws ArtifactResolutionException
+ {
+ return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, null, null,
+ source, filter, artifactFactory );
+ }
+
+ private ArtifactResolutionResult collect( ArtifactSpec a, Artifact managedVersion )
+ throws ArtifactResolutionException
+ {
+ return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact,
+ Collections.singleton( managedVersion ), null, null, source, null,
+ artifactFactory );
+ }
+
private ArtifactSpec createArtifact( String id, String version )
{
- return createArtifact( id, version, null );
+ return createArtifact( id, version, Artifact.SCOPE_COMPILE );
}
private ArtifactSpec createArtifact( String id, String version, String scope )
{
ArtifactSpec spec = new ArtifactSpec();
- spec.artifact = artifactFactory.createArtifact( "test", id, version, scope, "jar" );
+ spec.artifact = artifactFactory.createArtifact( GROUP_ID, id, version, scope, "jar" );
source.artifacts.put( spec.artifact.getId(), spec );
return spec;
}
+ private static Set createSet( Object[] x )
+ {
+ return new HashSet( Arrays.asList( x ) );
+ }
+
private class ArtifactSpec
{
Artifact artifact;
@@ -199,7 +326,7 @@
}
}
- private static class Source
+ private class Source
implements ArtifactMetadataSource
{
Map artifacts = new HashMap();
@@ -208,7 +335,31 @@
throws ArtifactMetadataRetrievalException, ArtifactResolutionException
{
ArtifactSpec a = (ArtifactSpec) artifacts.get( artifact.getId() );
- return a.dependencies;
+ return createArtifacts( artifactFactory, a.dependencies, artifact.getScope(),
+ artifact.getDependencyFilter() );
+ }
+
+ private Set createArtifacts( ArtifactFactory artifactFactory, Set dependencies, String inheritedScope,
+ ArtifactFilter dependencyFilter )
+ {
+ Set projectArtifacts = new HashSet();
+
+ for ( Iterator i = dependencies.iterator(); i.hasNext(); )
+ {
+ Artifact d = (Artifact) i.next();
+
+ Artifact artifact = artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(),
+ d.getScope(), d.getType(), inheritedScope );
+
+ if ( artifact != null && ( dependencyFilter == null || dependencyFilter.include( artifact ) ) )
+ {
+ artifact.setDependencyFilter( dependencyFilter );
+
+ projectArtifacts.add( artifact );
+ }
+ }
+
+ return projectArtifacts;
}
}
}
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Tue Jun 21 23:46:26 2005
@@ -18,6 +18,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
@@ -213,7 +214,7 @@
Artifact pluginArtifact = artifactFactory.createArtifact( groupId, artifactId, version,
Artifact.SCOPE_RUNTIME,
- MojoDescriptor.MAVEN_PLUGIN, null );
+ MojoDescriptor.MAVEN_PLUGIN );
addPlugin( pluginKey, pluginArtifact, project, localRepository );
@@ -555,10 +556,13 @@
artifactFactory );
List remoteArtifactRepositories = project.getRemoteArtifactRepositories();
- ArtifactResolutionResult result = artifactResolver.resolveTransitively( pluginArtifact,
+ ArtifactRepository localRepository = session.getLocalRepository();
+ Set dependencies = metadataSource.retrieve( pluginArtifact, localRepository,
+ remoteArtifactRepositories );
+
+ ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, pluginArtifact,
remoteArtifactRepositories,
- session.getLocalRepository(),
- metadataSource,
+ localRepository, metadataSource,
artifactFilter );
Set resolved = result.getArtifacts();
@@ -582,7 +586,7 @@
ArtifactFilter distroProvidedFilter = new InversionArtifactFilter( artifactFilter );
ArtifactResolutionResult distroProvidedResult = artifactResolver
- .resolveTransitively( pluginArtifact, remoteArtifactRepositories, session.getLocalRepository(),
+ .resolveTransitively( dependencies, pluginArtifact, remoteArtifactRepositories, localRepository,
metadataSource, distroProvidedFilter );
Set distroProvided = distroProvidedResult.getArtifacts();
@@ -601,6 +605,10 @@
catch ( PlexusContainerException e )
{
throw new PluginConfigurationException( "Cannot start plugin container", e );
+ }
+ catch ( ArtifactMetadataRetrievalException e )
+ {
+ throw new PluginConfigurationException( "Cannot resolve plugin dependencies", e );
}
finally
{
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=191773&r1=191772&r2=191773&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 Tue Jun 21 23:46:26 2005
@@ -268,7 +268,7 @@
for ( Iterator i = lineage.iterator(); i.hasNext(); )
{
MavenProject currentProject = (MavenProject) i.next();
-
+
Model current = currentProject.getModel();
forcePluginExecutionIdCollision( pomLocation, current );
@@ -312,7 +312,9 @@
}
catch ( IllegalStateException collisionException )
{
- throw new ProjectBuildingException( "Detected illegal plugin-execution configuration in: " + pomLocation + " Error output: \n\n" + collisionException.getMessage(), collisionException );
+ throw new ProjectBuildingException(
+ "Detected illegal plugin-execution configuration in: " + pomLocation +
+ " Error output: \n\n" + collisionException.getMessage(), collisionException );
}
}
}
@@ -388,7 +390,7 @@
{
Artifact parentArtifact = artifactFactory.createArtifact( parentProject.getGroupId(),
parentProject.getArtifactId(),
- parentProject.getVersion(), null, "pom", null );
+ parentProject.getVersion(), null, "pom" );
project.setParentArtifact( parentArtifact );
}
@@ -450,7 +452,7 @@
// ----------------------------------------------------------------------
Artifact artifact = artifactFactory.createArtifact( parentModel.getGroupId(), parentModel.getArtifactId(),
- parentModel.getVersion(), null, "pom", null );
+ parentModel.getVersion(), null, "pom" );
model = findModelFromRepository( artifact, aggregatedRemoteWagonRepositories, localRepository );
@@ -535,9 +537,7 @@
protected Set createArtifacts( List dependencies )
{
- // TODO: merge with MavenMetadataSource properly
- return new MavenMetadataSource( artifactResolver, this, artifactFactory ).createArtifacts( dependencies, null,
- null );
+ return MavenMetadataSource.createArtifacts( artifactFactory, dependencies, null, null );
}
protected Set createPluginArtifacts( List plugins )
@@ -559,7 +559,7 @@
}
Artifact artifact = artifactFactory.createArtifact( p.getGroupId(), p.getArtifactId(), version, null,
- "maven-plugin", null );
+ "maven-plugin" );
if ( artifact != null )
{
pluginArtifacts.add( artifact );
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=191773&r1=191772&r2=191773&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Tue Jun 21 23:46:26 2005
@@ -139,10 +139,11 @@
IOUtil.close( reader );
}
}
- return createArtifacts( dependencies, artifact.getScope(), artifact.getDependencyFilter() );
+ return createArtifacts( artifactFactory, dependencies, artifact.getScope(), artifact.getDependencyFilter() );
}
- public Set createArtifacts( List dependencies, String inheritedScope, ArtifactFilter dependencyFilter )
+ public static Set createArtifacts( ArtifactFactory artifactFactory, List dependencies, String inheritedScope,
+ ArtifactFilter dependencyFilter )
{
Set projectArtifacts = new HashSet();
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org