You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2017/05/26 21:16:00 UTC
[24/48] maven-resolver git commit: Added example snippet
demonstrating verbose dependency graph aka m2e-like dependency hierarchy
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/demos
Commit: e426060176028c5a3aab1850c5fa74b73f68aace
Parents: bfcb0fd
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Aug 17 18:22:06 2013 +0200
Committer: Benjamin Bentmann <be...@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 )