Reputation: 29163
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).
Upvotes: 329
Views: 809593
Reputation: 16935
Create a simple project with pom.xml
only. Add your dependency and run:
mvn dependency:tree
(Version for multi-module Maven project: mvn compile dependency:tree
)
Unfortunately dependency mojo must use pom.xml
or you get following error:
Cannot execute mojo: tree. It requires a project with an existing
pom.xml
, but the build is not using one.
pom.xml
of your artifact in maven central repositoryDependencies are described In pom.xml
of your artifact. Find it using maven infrastructure.
Go to https://central.sonatype.com and enter your groupId
and artifactId
.
Or you can go to https://repo1.maven.org/maven2/ and navigate first using plugins groupId
, later using artifactId
and finally using its version.
For example see org.springframework:spring-core
Part of dependency artifact is a pom.xml
. That specifies it's dependency. And you can execute mvn dependency:tree -f <your-pom-filename>
on this pom.
Upvotes: 452
Reputation: 5163
To just quickly see for an artifact what we are buying into, independent of a project, this script can be used:
#!/bin/bash
# Idea from: https://stackoverflow.com/a/31097420/2954288
# single argument must be the URL of a pom
pomUrl=$1
dir=$(mktemp --tmpdir -d showMavenTree-XXX)
cd "$dir"
wget "$pomUrl" -O pom.xml
## more fancy things can be added by reading
## https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html
mvn dependency:tree -DoutputFile=pom.dot -DoutputType=dot -Dscope=compile
dot -Tsvg -Grankdir=LR <pom.dot >pom.svg
xdg-open pom.svg
Upvotes: 0
Reputation: 1976
If you are using a local repository use -s settings.xml along with it. Below is what worked for me:
mvn clean compile install -s settings.xml
mvn dependency:tree -s settings.xml
Upvotes: 1
Reputation: 129
You can filter a specific artifact using the -Dincludes flag:
mvn dependency:tree -Dincludes=<artifact>
You can find more information here
Upvotes: 4
Reputation: 1091
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.
Upvotes: 18
Reputation: 3210
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
Upvotes: 108
Reputation: 4604
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.
Upvotes: 8
Reputation: 16142
When using IntelliJ, you have a one-click tool for Maven dependency exploration: https://www.jetbrains.com/help/idea/work-with-maven-dependencies.html
Upvotes: 6
Reputation: 14950
The solution is to call dependency:tree with the artifact's pom.xml file:
mvn -f "$HOME/.m2/repository/$POM_PATH" dependency:tree
See also How to list the transitive dependencies of an artifact from a repository?
Upvotes: 22
Reputation: 570635
If your artifact is not a dependency of a given project, your best bet is to use a repository search engine. Many of them describes the dependencies of a given artifact.
Upvotes: 1
Reputation: 299218
If you use a current version of m2eclipse (which you should if you use eclipse and maven):
Select the menu entry
Navigate -> Open Maven POM
and enter the artifact you are looking for.
The pom will open in the pom editor, from which you can select the tab Dependency Hierarchy
to view the dependency hierarchy (as the name suggests :-) )
Upvotes: 6