You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Jon Harper (JIRA)" <ji...@apache.org> on 2017/03/08 19:53:38 UTC

[jira] [Commented] (MNG-5592) Maven Dependency Resolution Locks up

    [ https://issues.apache.org/jira/browse/MNG-5592?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15901883#comment-15901883 ] 

Jon Harper commented on MNG-5592:
---------------------------------

Hi,
this issue is not fixed. Please reopen.

I put together a small testcase which shows that upgrade to aether 1 only partially fixes the problem.I'll attach it to this bug. Here's some sample output on my testcase: We see that we maven 3.2.3, the two builds of "e-unexpected-crash" cause an exception, with maven 3.2.5 (which ships aether 1.0), the first build is fixed (it correctly reports the dependency conflict) but the second one still throws the exception.

Apache Maven 3.2.3:
{noformat}
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22:58:10+02:00)

[..snip Adding a few artifacts to the repository to setup the dependency conflict..]

Building e-unexpected-crash; Should fail with dependency conflict but crashes up to mvn 3.2.3
[INFO] Building e unexpected crash 1.0
[INFO] BUILD SUCCESS
Exception in thread "main" java.lang.StackOverflowError
	at org.eclipse.aether.util.graph.transformer.ConflictResolver$ConflictContext.isIncluded(ConflictResolver.java:1062)

[..snip Adding more artifacts to retrigger the bug after maven 3.2.5..]

Building e-unexpected-crash; Should fail with dependency conflict but crashes on all maven version (tested up to 3.5.0-alpha-1)
[INFO] Building e unexpected crash 1.0
[INFO] BUILD SUCCESS
Exception in thread "main" java.lang.StackOverflowError
	at org.eclipse.aether.util.graph.transformer.ConflictResolver$ConflictContext.isIncluded(ConflictResolver.java:1062)

{noformat}

Apache maven 3.2.5:
{noformat}
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T18:29:23+01:00)

[..snip Adding a few artifacts to the repository to setup the dependency conflict..]

Building e-unexpected-crash; Should fail with dependency conflict but crashes up to mvn 3.2.3
[INFO] Building e unexpected crash 1.0
[INFO] BUILD FAILURE
[ERROR] Failed to execute goal on project e-ko: Could not resolve dependencies for project e:e-ko:jar:1.0: Failed to collect dependencies for e:e-ko:jar:1.0: Could not resolve version conflict among [c:c:jar:[2.0,2.0], d:d:jar:[1.0,1.0] -> c:c:jar:[1.0,1.0]] -> [Help 1]
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

[..snip Adding more artifacts to retrigger the bug after maven 3.2.5..]

Building e-unexpected-crash; Should fail with dependency conflict but crashes on all maven version (tested up to 3.5.0-alpha-1)
[INFO] Building e unexpected crash 1.0
[INFO] BUILD SUCCESS
Exception in thread "main" java.lang.StackOverflowError
	at org.eclipse.aether.util.graph.transformer.ConflictResolver$ConflictContext.isIncluded(ConflictResolver.java:1062)

{noformat}

I did a bit of debugging. I saw mainly two things:
- maven passes a dependency graph to aether PathRecordingDependencyVisitor where some artifacts are the same maven coordinate but have different DependencyNode Objects. But aether uses an IdentityHashtable to detect cycles, so it doesn't detect them correctly here. The artifacts with different DependencyNodes come from the range dependency.
- Aether always remove the dependencyNode from it's visited set after in visitLeave. So in the following case, it will do an infinite cyclic recursion even when the dependencynode objects are unique:
{noformat}
* A
  * B1
     * A   <- Here A is in the visited set, so we don't recurse on the children. But A is removed from the visited set !
  * B2
     * A   <- Here A is no longer in the visited set. Aether will recurse
        * B1
            * A
        * B2
            * A
          [..snip.. infinite loop]
{noformat}


I did some experiments:
- changing the aether code to properly track dependency nodes (using an integer hashmap value and increment/decrement, recursing only when the value is 0). This fixed the crash.
- changing the aether code to key a hashtable by the maven coordinate string, instead of the Identity of the DependencyNode. This resulted in less artifacts examined during the graph walk, but didn't fix the bug (it still does an infinite recursion)

To debug this, I displayed the graph with the following patch:
{noformat}
diff --git a/aether-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java b/aether-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java
index c702d23..5f87fd3 100644
--- a/aether-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java
+++ b/aether-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java
@@ -329,8 +329,12 @@ public final class DefaultDependencyNode
         }
     }
 
+    public static int depth = 0;
     public boolean accept( DependencyVisitor visitor )
     {
+       depth++;
+       System.out.println( (new String(new char[depth]).replace('\0', ' '))
+                       + this.toString() + ";" + super.toString());
         if ( visitor.visitEnter( this ) )
         {
             for ( DependencyNode child : children )
@@ -341,7 +345,7 @@ public final class DefaultDependencyNode
                 }
             }
         }
-
+        depth--;
         return visitor.visitLeave( this );
     }
 


{noformat}

Here's what it looks like on the case still failing in maven 3.3.9:
#Without any patch
{noformat}
 e:e-ko:jar:1.0;org.eclipse.aether.graph.DefaultDependencyNode@72cf2de5
  a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@2bb7bd00
  a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@14b030a0
   b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
  [.. snip infinite..]
{noformat}


#With the integer increment/decrement patch:
{noformat}
 e:e-ko:jar:1.0;org.eclipse.aether.graph.DefaultDependencyNode@72cf2de5
  a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@2bb7bd00
  a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@14b030a0
   b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
  a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@56bca85b
   b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@75d0911a
    a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
      a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
      a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
       b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
      a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
  c:c:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@75e91545
  d:d:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@60d1a32f
   c:c:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@531c311e
{noformat}

#With the integer increment/decrement patch and the maven string coordinate instead of the DependencyNode ID
{noformat}
 e:e-ko:jar:1.0;org.eclipse.aether.graph.DefaultDependencyNode@72cf2de5
  a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@2bb7bd00
  a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@14b030a0
   b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
    a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
  a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@56bca85b
   b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@75d0911a
    a:a:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@422c3c7a
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@18230356
     b:b:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@41e350f1
    a:a:jar:3.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@d8305c2
  c:c:jar:2.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@75e91545
  d:d:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@60d1a32f
   c:c:jar:1.0 (compile);org.eclipse.aether.graph.DefaultDependencyNode@531c311e
{noformat}

After the integer increment/decrement, an artifact's children are reexamined only if the artifact reappears in a different subtree. But I think that it is not needed to reexamine it at all ? Maybe the code should always prune the tree when seeing an artifact for the second time ? The graph walk (PathRecordingDependencyVisitor) is called from aether-utils NearestVersionSelector in newFailure in case there is no version that can satisfy all the ranges. This leads to quite a few artifacts beeing examined: in my real world project 2million+ artifacts are examined; if I modify the code to never revist the children of an already visited artifiact, this goes doesn to 5000; the outputted conflict message is the same.

Here are the patches that I mentionned:
Using the maven coordinate and tracking for each subtree:
{noformat}
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java b/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java
index 7633a11..b76ac07 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java
@@ -12,7 +12,7 @@ package org.eclipse.aether.util.graph.visitor;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.IdentityHashMap;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -33,7 +33,7 @@ public final class PathRecordingDependencyVisitor
 
     private final Stack<DependencyNode> parents;
 
-    private final Map<DependencyNode, Object> visited;
+    private final Map<String, Integer> visited;
 
     private final boolean excludeChildrenOfMatches;
 
@@ -63,7 +63,7 @@ public final class PathRecordingDependencyVisitor
         this.excludeChildrenOfMatches = excludeChildrenOfMatches;
         paths = new ArrayList<List<DependencyNode>>();
         parents = new Stack<DependencyNode>();
-        visited = new IdentityHashMap<DependencyNode, Object>( 128 );
+        visited = new HashMap<String, Integer>( 128 );
     }
 
     /**
@@ -109,19 +109,29 @@ public final class PathRecordingDependencyVisitor
             }
         }
 
-        if ( visited.put( node, Boolean.TRUE ) != null )
-        {
-            return false;
+        Integer i = visited.get(node.toString());
+        if (i == null) {
+            i=0;
         }
+       visited.put( node.toString(), i+1 );
 
-        return true;
+        return i.equals(0);
     }
 
     public boolean visitLeave( DependencyNode node )
     {
         parents.pop();
-        visited.remove( node );
-
+        Integer i = visited.get(node.toString());
+
+        //in visitEnter, if accept and excludeChildrenOfMatches are true,
+        //we don't put it in the set of visited at all so it will be null here
+        if (i != null) {
+               if (i.equals(1)) {
+                       visited.remove(node.toString());
+               } else {
+                       visited.put( node.toString(), i-1 );
+               }
+        }
         return true;
     }
 

{noformat}

# using toString and never revisiting:
{noformat}
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java b/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java
index 7633a11..c861712 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/graph/visitor/PathRecordingDependencyVisitor.java
@@ -12,7 +12,7 @@ package org.eclipse.aether.util.graph.visitor;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.IdentityHashMap;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -33,7 +33,7 @@ public final class PathRecordingDependencyVisitor
 
     private final Stack<DependencyNode> parents;
 
-    private final Map<DependencyNode, Object> visited;
+    private final Map<String, Object> visited;
 
     private final boolean excludeChildrenOfMatches;
 
@@ -63,7 +63,7 @@ public final class PathRecordingDependencyVisitor
         this.excludeChildrenOfMatches = excludeChildrenOfMatches;
         paths = new ArrayList<List<DependencyNode>>();
         parents = new Stack<DependencyNode>();
-        visited = new IdentityHashMap<DependencyNode, Object>( 128 );
+        visited = new HashMap<String, Object>( 128 );
     }
 
     /**
@@ -109,7 +109,7 @@ public final class PathRecordingDependencyVisitor
             }
         }
 
-        if ( visited.put( node, Boolean.TRUE ) != null )
+        if ( visited.put( node.toString(), Boolean.TRUE ) != null )
         {
             return false;
         }
@@ -120,7 +120,6 @@ public final class PathRecordingDependencyVisitor
     public boolean visitLeave( DependencyNode node )
     {
         parents.pop();
-        visited.remove( node );
 
         return true;
     }
{noformat}

I'm posting everything here since I think the aether code has been migrated to apache (and that's part of the purpose of the maven-3.5.0 release) so the bug is now in apache :).
Also, the patches are proofs of concepts, I didn't look at other code calling PathRecordingDependencyVisitor. Maybe it relies on the old behavior, and the new behavior should go in a new class.

Hopefully someone can finalize this work and improve maven.

Cheers,
Jon


> Maven Dependency Resolution Locks up
> ------------------------------------
>
>                 Key: MNG-5592
>                 URL: https://issues.apache.org/jira/browse/MNG-5592
>             Project: Maven
>          Issue Type: Bug
>          Components: Artifacts and Repositories
>    Affects Versions: 3.1.1, 3.2.1
>         Environment: OS/X,  Java 7 and Java 8
>            Reporter: Mark Derricutt
>            Assignee: igorfie
>             Fix For: 3.2.5
>
>         Attachments: mng-5592-simplified.zip, mng-5592.zip, MNG-5592.zip
>
>
> One one of my larger integration projects that involves A LOT of version ranges across a broad range of dependencies I'm seeing that Maven locks up resolving dependencies.
> I've recently seen this in 3.1.1 but it's happening more and more often under 3.2.1.
> It appears that Eclipse Aether is falling into a circular loop somewhere and locking up.
> {code}
> "main" #1 prio=5 os_prio=31 tid=0x00007f966b001000 nid=0x1903 runnable [0x0000000103559000]
>    java.lang.Thread.State: RUNNABLE
> 	at org.eclipse.aether.util.graph.transformer.ConflictResolver$ConflictContext.isIncluded(ConflictResolver.java:1062)
> 	at org.eclipse.aether.util.graph.transformer.NearestVersionSelector$1.accept(NearestVersionSelector.java:145)
> 	at org.eclipse.aether.util.graph.visitor.PathRecordingDependencyVisitor.visitEnter(PathRecordingDependencyVisitor.java:88)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:324)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.graph.DefaultDependencyNode.accept(DefaultDependencyNode.java:329)
> 	at org.eclipse.aether.util.graph.transformer.NearestVersionSelector.newFailure(NearestVersionSelector.java:149)
> 	at org.eclipse.aether.util.graph.transformer.NearestVersionSelector.backtrack(NearestVersionSelector.java:111)
> 	at org.eclipse.aether.util.graph.transformer.NearestVersionSelector.selectVersion(NearestVersionSelector.java:84)
> 	at org.eclipse.aether.util.graph.transformer.ConflictResolver.transformGraph(ConflictResolver.java:187)
> 	at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:275)
> 	at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:317)
> 	at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:159)
> 	at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:195)
> 	at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:127)
> 	at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:257)
> 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:200)
> 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
> 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
> 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)
> 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
> 	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
> 	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)
> 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)
> 	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
> 	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
> 	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
> 	at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> {code}
> Running with {{-X -U}} I can see that Maven/Aether seems to be looking up A LOT of external repositories:
> {code}
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Could not find metadata smx3:smx3.applicationmanager.api/maven-metadata.xml in local (/Users/amrk/.m2/repository)
> [DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for http://nexus.smxemail.com/nexus/content/groups/public/
> Downloading: http://nexus.smxemail.com/nexus/content/groups/public/smx3/smx3.applicationmanager.api/maven-metadata.xml
> Downloaded: http://nexus.smxemail.com/nexus/content/groups/public/smx3/smx3.applicationmanager.api/maven-metadata.xml (489 B at 0.1 KB/sec)
> [DEBUG] Writing tracking file /Users/amrk/.m2/repository/smx3/smx3.applicationmanager.api/resolver-status.properties
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for http://nexus.smxemail.com/nexus/content/groups/public/
> Downloading: http://nexus.smxemail.com/nexus/content/groups/public/smx3/smx3.applicationmanager/maven-metadata.xml
> Downloaded: http://nexus.smxemail.com/nexus/content/groups/public/smx3/smx3.applicationmanager/maven-metadata.xml (7 KB at 1.5 KB/sec)
> [DEBUG] Writing tracking file /Users/amrk/.m2/repository/smx3/smx3.applicationmanager/resolver-status.properties
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Could not find metadata smx3:smx3.applicationmanager.api/maven-metadata.xml in local (/Users/amrk/.m2/repository)
> [DEBUG] Skipped remote update check for smx3:smx3.applicationmanager.api/maven-metadata.xml, already updated during this session.
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for sonatype-nexus-snapshots (https://oss.sonatype.org/content/repositories/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for sonatype-nexus-snapshots (https://oss.sonatype.org/content/repositories/snapshots).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for apache.snapshots (http://people.apache.org/repo/m2-snapshot-repository).
> [DEBUG] Using mirror Nexus (http://nexus.smxemail.com/nexus/content/groups/public/) for central (http://repo.maven.apache.org/maven2).
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)