Index: pom.xml
===================================================================
--- pom.xml (revision 615545)
+++ pom.xml (working copy)
@@ -285,8 +285,8 @@
org.apache.maven.wagon
- wagon-http-lightweight
- 1.0-beta-2
+ wagon-http
+ 1.0-rc1-SNAPSHOT
easymock
Index: maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java (revision 615545)
+++ maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java (working copy)
@@ -67,6 +67,9 @@
artifacts.add( "wagon-http-lightweight" );
artifacts.add( "wagon-ssh" );
artifacts.add( "wagon-ssh-external" );
+ artifacts.add( "commons-logging" );
+ artifacts.add( "commons-httpclient" );
+ artifacts.add( "commons-codec" );
return new ExclusionSetFilter( artifacts );
}
Index: maven-core/pom.xml
===================================================================
--- maven-core/pom.xml (revision 615545)
+++ maven-core/pom.xml (working copy)
@@ -151,7 +151,7 @@
org.apache.maven.wagon
- wagon-http-lightweight
+ wagon-http
runtime
Index: maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
===================================================================
--- maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (revision 615545)
+++ maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (working copy)
@@ -39,13 +39,11 @@
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.CountDownLatch;
public class DefaultArtifactResolver
extends AbstractLogEnabled
@@ -63,6 +61,11 @@
private ArtifactCollector artifactCollector;
+ public DefaultArtifactResolver()
+ {
+ super();
+ }
+
// ----------------------------------------------------------------------
// Implementation
// ----------------------------------------------------------------------
@@ -297,23 +300,39 @@
artifactResolutionResult = artifactCollector.collect( artifacts, originatingArtifact, managedVersions,
localRepository, remoteRepositories, source, filter,
listeners );
+ ThreadPoolExecutor resolveArtifactPool = new ThreadPoolExecutor(3, 5, 3, TimeUnit.SECONDS, new ArrayBlockingQueue(1000));
List resolvedArtifacts = new ArrayList();
List missingArtifacts = new ArrayList();
+ CountDownLatch latch = new CountDownLatch(artifactResolutionResult.getArtifactResolutionNodes().size());
+ Map> nodesByGroupId = new HashMap>();
for ( Iterator i = artifactResolutionResult.getArtifactResolutionNodes().iterator(); i.hasNext(); )
{
ResolutionNode node = (ResolutionNode) i.next();
- try
+ List nodes = nodesByGroupId.get(node.getArtifact().getGroupId());
+ if (nodes == null)
{
- resolve( node.getArtifact(), node.getRemoteRepositories(), localRepository );
- resolvedArtifacts.add( node.getArtifact() );
+ nodes = new ArrayList();
+ nodesByGroupId.put(node.getArtifact().getGroupId(), nodes);
}
- catch ( ArtifactNotFoundException anfe )
+ nodes.add(node);
+ }
+
+ try {
+ for (List nodes : nodesByGroupId.values())
{
- getLogger().debug( anfe.getMessage(), anfe );
-
- missingArtifacts.add( node.getArtifact() );
+ resolveArtifactPool.execute(new ResolveArtifactTask(resolveArtifactPool, latch, nodes, localRepository, resolvedArtifacts, missingArtifacts));
}
+ latch.await();
+ } catch (InterruptedException e) {
+ throw new ArtifactResolutionException("Resolution interrupted", null, e);
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof ArtifactResolutionException)
+ throw (ArtifactResolutionException) ex.getCause();
+ else
+ throw ex;
+ } finally {
+ resolveArtifactPool.shutdownNow();
}
if ( missingArtifacts.size() > 0 )
@@ -342,4 +361,51 @@
remoteRepositories, source, null, listeners );
}
+ private class ResolveArtifactTask implements Runnable {
+ private List nodes;
+ private ArtifactRepository localRepository;
+ private List resolvedArtifacts;
+ private List missingArtifacts;
+ private CountDownLatch latch;
+ private ThreadPoolExecutor pool;
+
+ public ResolveArtifactTask(ThreadPoolExecutor pool, CountDownLatch latch, List nodes, ArtifactRepository localRepository, List resolvedArtifacts, List missingArtifacts) {
+ this.nodes = nodes;
+ this.localRepository = localRepository;
+ this.resolvedArtifacts = resolvedArtifacts;
+ this.missingArtifacts = missingArtifacts;
+ this.latch = latch;
+ this.pool = pool;
+ }
+
+ public void run() {
+ //getLogger().info("Size of nodes: "+nodes.size()+" on thread: "+Thread.currentThread().getId());
+ Iterator i = nodes.iterator();
+ ResolutionNode node = i.next();
+ i.remove();
+ try {
+ resolveArtifact(node);
+ if (i.hasNext())
+ pool.execute(new ResolveArtifactTask(pool, latch, nodes, localRepository, resolvedArtifacts, missingArtifacts));
+ } catch (ArtifactResolutionException e) {
+ throw new RuntimeException(e);
+ }
+ latch.countDown();
+ }
+
+ private void resolveArtifact(ResolutionNode node) throws ArtifactResolutionException {
+ try
+ {
+ resolve( node.getArtifact(), node.getRemoteRepositories(), localRepository );
+ resolvedArtifacts.add( node.getArtifact() );
+ }
+ catch ( ArtifactNotFoundException anfe )
+ {
+ getLogger().debug( anfe.getMessage(), anfe );
+
+ missingArtifacts.add( node.getArtifact() );
+ }
+ }
+ }
+
}
Index: maven-artifact-manager/pom.xml
===================================================================
--- maven-artifact-manager/pom.xml (revision 615545)
+++ maven-artifact-manager/pom.xml (working copy)
@@ -65,6 +65,14 @@
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.5
+ 1.5
+
+
+
maven-surefire-plugin