How to get a dependency tree for an artifact?

Viewed 436619

dependency:tree can be used to see the dependency tree for a given project. But what I need is to see the dependency tree for a 3rd party artifact.

I guess I can create an empty project, but I'm looking for something easier (I need to do this for several artifacts).

8 Answers

If you bother creating a sample project and adding your 3rd party dependency to that, then you can run the following in order to see the full hierarchy of the dependencies.

You can search for a specific artifact using this maven command:

mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[type]:[version]

According to the documentation:

where each pattern segment is optional and supports full and partial * wildcards. An empty pattern segment is treated as an implicit wildcard.

Imagine you are trying to find 'log4j-1.2-api' jar file among different modules of your project:

mvn dependency:tree -Dverbose -Dincludes=org.apache.logging.log4j:log4j-1.2-api

more information can be found here.

Edit: The verbose flag has been reintroduced in version 3.2.0. You can use the specific version as below:

mvn org.apache.maven.plugins:maven-dependency-plugin:3.2.0:tree -Dverbose=true 

If anyone using IntelliJ wants to see dependency tree directly in IDE then they can install Maven Helper Plugin plugin.

Once installed open pom.xml and you would able to see Dependency Analyze tab like below. It also provides option to see dependency that is conflicted only and also as a tree structure.

enter image description here

The for-artifact goal of the depgraph-maven-plugin should do what you want. To get a dependency graph of org.jboss.ws:jbossws-common-tools:1.3.2.Final you simply do

mvn com.github.ferstl:depgraph-maven-plugin:3.3.0:for-artifact -DgroupId=org.jboss.ws -DartifactId=jbossws-common-tools -Dversion=1.3.2.Final -DgraphFormat=text -DshowGroupIds=true -DshowVersions=true

and you get

org.jboss.ws:jbossws-common-tools:1.3.2.Final:compile
+- org.jboss.ws:jbossws-api:1.1.2.Final:compile
+- org.apache.ant:ant:1.7.1:provided
|  \- org.apache.ant:ant-launcher:1.7.1:provided
+- gnu.getopt:java-getopt:1.0.13:provided
+- log4j:log4j:1.2.14:provided
\- junit:junit:3.8.2:test

without the need to create a Maven project or use and IDE or online app.

Related