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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]