Added example snippet demonstrating verbose dependency graph aka m2e-like 
dependency hierarchy


Project: http://git-wip-us.apache.org/repos/asf/maven-resolver/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-resolver/commit/e4260601
Tree: http://git-wip-us.apache.org/repos/asf/maven-resolver/tree/e4260601
Diff: http://git-wip-us.apache.org/repos/asf/maven-resolver/diff/e4260601

Branch: refs/heads/master
Commit: e426060176028c5a3aab1850c5fa74b73f68aace
Parents: bfcb0fd
Author: Benjamin Bentmann <bentm...@sonatype.com>
Authored: Sat Aug 17 18:22:06 2013 +0200
Committer: Benjamin Bentmann <bentm...@sonatype.com>
Committed: Sat Aug 17 18:22:06 2013 +0200

----------------------------------------------------------------------
 .../eclipse/aether/examples/AllAetherDemos.java |  3 +-
 .../aether/examples/GetDependencyHierarchy.java | 65 ++++++++++++++++++++
 .../util/ConsoleDependencyGraphDumper.java      | 49 ++++++++++++++-
 3 files changed, 115 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/e4260601/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/AllAetherDemos.java
----------------------------------------------------------------------
diff --git 
a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/AllAetherDemos.java
 
b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/AllAetherDemos.java
index bb85d29..b53079b 100644
--- 
a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/AllAetherDemos.java
+++ 
b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/AllAetherDemos.java
@@ -1,5 +1,5 @@
 
/*******************************************************************************
- * Copyright (c) 2010, 2011 Sonatype, Inc.
+ * Copyright (c) 2010, 2013 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ public class AllAetherDemos
         FindNewestVersion.main( args );
         GetDirectDependencies.main( args );
         GetDependencyTree.main( args );
+        GetDependencyHierarchy.main( args );
         ResolveArtifact.main( args );
         ResolveTransitiveDependencies.main( args );
         InstallArtifacts.main( args );

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/e4260601/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/GetDependencyHierarchy.java
----------------------------------------------------------------------
diff --git 
a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/GetDependencyHierarchy.java
 
b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/GetDependencyHierarchy.java
new file mode 100644
index 0000000..2991714
--- /dev/null
+++ 
b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/GetDependencyHierarchy.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sonatype, Inc. - initial API and implementation
+ 
*******************************************************************************/
+package org.eclipse.aether.examples;
+
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.examples.util.Booter;
+import org.eclipse.aether.examples.util.ConsoleDependencyGraphDumper;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
+import org.eclipse.aether.util.graph.transformer.ConflictResolver;
+
+/**
+ * Visualizes the transitive dependencies of an artifact similar to m2e's 
dependency hierarchy view.
+ */
+public class GetDependencyHierarchy
+{
+
+    public static void main( String[] args )
+        throws Exception
+    {
+        System.out.println( 
"------------------------------------------------------------" );
+        System.out.println( GetDependencyHierarchy.class.getSimpleName() );
+
+        RepositorySystem system = Booter.newRepositorySystem();
+
+        DefaultRepositorySystemSession session = 
Booter.newRepositorySystemSession( system );
+
+        session.setConfigProperty( ConflictResolver.CONFIG_PROP_VERBOSE, true 
);
+        session.setConfigProperty( DependencyManagerUtils.CONFIG_PROP_VERBOSE, 
true );
+
+        Artifact artifact = new DefaultArtifact( 
"org.apache.maven:maven-aether-provider:3.1.0" );
+
+        RemoteRepository repo = Booter.newCentralRepository();
+
+        ArtifactDescriptorResult descriptorResult =
+            system.readArtifactDescriptor( session,
+                                           new 
ArtifactDescriptorRequest().setArtifact( artifact ).addRepository( repo ) );
+
+        CollectRequest collectRequest = new CollectRequest();
+        collectRequest.setRootArtifact( descriptorResult.getArtifact() );
+        collectRequest.setDependencies( descriptorResult.getDependencies() );
+        collectRequest.setManagedDependencies( 
descriptorResult.getManagedDependencies() );
+        collectRequest.addRepository( repo );
+
+        CollectResult collectResult = system.collectDependencies( session, 
collectRequest );
+
+        collectResult.getRoot().accept( new ConsoleDependencyGraphDumper() );
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/e4260601/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
----------------------------------------------------------------------
diff --git 
a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
 
b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
index 254b200..b829990 100644
--- 
a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
+++ 
b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
@@ -15,8 +15,13 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.graph.DependencyNode;
 import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.util.artifact.ArtifactIdUtils;
+import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
+import org.eclipse.aether.util.graph.transformer.ConflictResolver;
 
 /**
  * A dependency visitor that dumps the graph to the console.
@@ -58,7 +63,49 @@ public class ConsoleDependencyGraphDumper
 
     private String formatNode( DependencyNode node )
     {
-        return String.valueOf( node );
+        StringBuilder buffer = new StringBuilder( 128 );
+        Artifact a = node.getArtifact();
+        Dependency d = node.getDependency();
+        buffer.append( a );
+        if ( d != null && d.getScope().length() > 0 )
+        {
+            buffer.append( " [" ).append( d.getScope() );
+            if ( d.isOptional() )
+            {
+                buffer.append( ", optional" );
+            }
+            buffer.append( "]" );
+        }
+        {
+            String premanaged = DependencyManagerUtils.getPremanagedVersion( 
node );
+            if ( premanaged != null && !premanaged.equals( a.getBaseVersion() 
) )
+            {
+                buffer.append( " (version managed from " ).append( premanaged 
).append( ")" );
+            }
+        }
+        {
+            String premanaged = DependencyManagerUtils.getPremanagedScope( 
node );
+            if ( premanaged != null && !premanaged.equals( d.getScope() ) )
+            {
+                buffer.append( " (scope managed from " ).append( premanaged 
).append( ")" );
+            }
+        }
+        DependencyNode winner = (DependencyNode) node.getData().get( 
ConflictResolver.NODE_DATA_WINNER );
+        if ( winner != null && !ArtifactIdUtils.equalsId( a, 
winner.getArtifact() ) )
+        {
+            Artifact w = winner.getArtifact();
+            buffer.append( " (conflicts with " );
+            if ( ArtifactIdUtils.toVersionlessId( a ).equals( 
ArtifactIdUtils.toVersionlessId( w ) ) )
+            {
+                buffer.append( w.getVersion() );
+            }
+            else
+            {
+                buffer.append( w );
+            }
+            buffer.append( ")" );
+        }
+        return buffer.toString();
     }
 
     public boolean visitLeave( DependencyNode node )

Reply via email to