| ~~ Licensed to the Apache Software Foundation (ASF) under one |
| ~~ or more contributor license agreements. See the NOTICE file |
| ~~ distributed with this work for additional information |
| ~~ regarding copyright ownership. The ASF licenses this file |
| ~~ to you under the Apache License, Version 2.0 (the |
| ~~ "License"); you may not use this file except in compliance |
| ~~ with the License. You may obtain a copy of the License at |
| ~~ |
| ~~ http://www.apache.org/licenses/LICENSE-2.0 |
| ~~ |
| ~~ Unless required by applicable law or agreed to in writing, |
| ~~ software distributed under the License is distributed on an |
| ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| ~~ KIND, either express or implied. See the License for the |
| ~~ specific language governing permissions and limitations |
| ~~ under the License. |
| |
| ------ |
| Dependency Tree Output Formats |
| ------ |
| Tayebwa Noah |
| ------ |
| 2025-06-04 |
| ------ |
| |
| Dependency Tree Output Formats |
| |
| The <<<dependency:tree>>> goal of the Maven Dependency Plugin generates a representation |
| of a project's dependency tree. The <<<outputType>>> parameter allows you to specify |
| the output format, which can be written to a file using the <<<outputFile>>> parameter |
| or printed to the console. Supported formats are <<<json>>>, <<<dot>>>, <<<graphml>>>, |
| and <<<tgf>>>. This section describes each format, its structure, and example usage. |
| |
| * Usage |
| |
| To <<generate>> the dependency tree in a specific format, use the following command: |
| |
| +---+ |
| mvn dependency:tree -DoutputType=<format> -DoutputFile=<filename> |
| +---+ |
| |
| * <<<format>>>: One of <<<json>>>, <<<dot>>>, <<<graphml>>>, or <<<tgf>>>. If omitted, |
| the default is a text-based tree printed to the console. |
| |
| * <<<filename>>>: The file to write the output to (e.g., <<<dependency-tree.json>>>). |
| If omitted, the output is printed to the console. |
| |
| Example: |
| |
| +---+ |
| mvn dependency:tree -DoutputType=json -DoutputFile=dependency-tree.json |
| +---+ |
| |
| <<Note>>: Ensure you are using Maven Dependency Plugin version 3.7.0 or later |
| (latest is 3.8.1 as of June 2025) to access these output formats. |
| |
| * Output Formats |
| |
| {JSON (outputType=json)} |
| |
| <<Description>>: The JSON format represents the dependency tree as a hierarchical JSON |
| object. The root node describes the project's artifact, and its dependencies are listed |
| in a <<<children>>> array, with nested dependencies recursively included. |
| |
| <<Structure>>: |
| |
| * <<Root Node>>: |
| |
| * <<<groupId>>>: The group ID of the project or dependency (e.g., <<<org.apache.maven.extensions>>>). |
| |
| * <<<artifactId>>>: The artifact ID (e.g., <<<maven-build-cache-extension>>>). |
| |
| * <<<version>>>: The version (e.g., <<<1.2.1-SNAPSHOT>>>). |
| |
| * <<<type>>>: The artifact type (e.g., <<<jar>>>). |
| |
| * <<<scope>>>: The dependency scope (e.g., <<<compile>>>, <<<test>>>, or empty for the project itself). |
| |
| * <<<classifier>>>: The classifier, if any (e.g., empty string if none). |
| |
| * <<<optional>>>: Whether the dependency is optional (<<<true>>> or <<<false>>>). |
| |
| * <<<children>>>: An array of dependency objects with the same structure, representing transitive dependencies. |
| |
| * <<Nested Dependencies>>: Each dependency in the <<<children>>> array follows the same |
| structure, allowing for recursive representation of the dependency tree. |
| |
| |
| <<Example>>: |
| |
| +---+ |
| { |
| "groupId": "org.apache.maven.extensions", |
| "artifactId": "maven-build-cache-extension", |
| "version": "1.2.1-SNAPSHOT", |
| "type": "jar", |
| "scope": "", |
| "classifier": "", |
| "optional": "false", |
| "children": [ |
| { |
| "groupId": "net.openhft", |
| "artifactId": "zero-allocation-hashing", |
| "version": "0.27ea0", |
| "type": "jar", |
| "scope": "compile", |
| "classifier": "", |
| "optional": "false" |
| }, |
| { |
| "groupId": "org.apache.maven.wagon", |
| "artifactId": "wagon-webdav-jackrabbit", |
| "version": "3.5.3", |
| "type": "jar", |
| "scope": "compile", |
| "classifier": "", |
| "optional": "false", |
| "children": [ |
| { |
| "groupId": "org.apache.jackrabbit", |
| "artifactId": "jackrabbit-webdav", |
| "version": "2.14.4", |
| "type": "jar", |
| "scope": "compile", |
| "classifier": "", |
| "optional": "false", |
| "children": [ |
| { |
| "groupId": "commons-codec", |
| "artifactId": "commons-codec", |
| "version": "1.10", |
| "type": "jar", |
| "scope": "compile", |
| "classifier": "", |
| "optional": "false" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| +---+ |
| |
| <<Usage Example>>: |
| |
| +---+ |
| mvn dependency:tree -DoutputType=json -DoutputFile=dependency-tree.json |
| +---+ |
| |
| <<Use Case>>: Parse the JSON output programmatically for dependency analysis or integration |
| with other tools. |
| |
| {DOT (outputType=dot)} |
| |
| <<Description>>: The DOT format is a plain-text graph description language used by Graphviz. |
| It represents the dependency tree as a directed graph (<<<digraph>>>), with nodes for |
| artifacts and directed edges for dependencies, labeled with their scope (e.g., <<<compile>>>). |
| |
| <<Structure>>: |
| |
| * <<Graph Declaration>>: Starts with <<<digraph "<groupId>:<artifactId>:<type>:<version>:">>>. |
| |
| * <<Nodes>>: Represented implicitly by their identifiers in edge definitions |
| (e.g., <<<"org.apache.maven.extensions:maven-build-cache-extension:jar:1.2.1-SNAPSHOT:">>>). |
| |
| * <<Edges>>: Defined as <<<"source" -> "target">>>, where <<<source>>> is the parent artifact |
| and <<<target>>> is the dependency, optionally labeled with the scope. |
| |
| <<Example>>: |
| |
| +---+ |
| digraph "org.apache.maven.extensions:maven-build-cache-extension:jar:1.2.1-SNAPSHOT:" { |
| "org.apache.maven.extensions:maven-build-cache-extension:jar:1.2.1-SNAPSHOT:" -> "net.openhft:zero-allocation-hashing:jar:0.27ea0:compile"; |
| "org.apache.maven.extensions:maven-build-cache-extension:jar:1.2.1-SNAPSHOT:" -> "org.apache.maven.wagon:wagon-webdav-jackrabbit:jar:3.5.3:compile"; |
| "org.apache.maven.wagon:wagon-webdav-jackrabbit:jar:3.5.3:compile" -> "org.apache.jackrabbit:jackrabbit-webdav:jar:2.14.4:compile"; |
| "org.apache.jackrabbit:jackrabbit-webdav:jar:2.14.4:compile" -> "commons-codec:commons-codec:jar:1.10:compile"; |
| } |
| +---+ |
| |
| <<Usage Example>>: |
| |
| +---+ |
| mvn dependency:tree -DoutputType=dot -DoutputFile=dependency-tree.dot |
| +---+ |
| |
| <<Visualization>>: Convert the DOT file to an image using Graphviz: |
| |
| +---+ |
| dot -Tpng dependency-tree.dot -o dependency-tree.png |
| +---+ |
| |
| <<Use Case>>: Visualize the dependency graph using tools like Graphviz for presentations |
| or analysis. |
| |
| {GraphML (outputType=graphml)} |
| |
| <<Description>>: GraphML is an XML-based format for representing graphs, compatible with |
| tools like yEd or Gephi. It represents the dependency tree as a directed graph with nodes |
| for artifacts and edges for dependencies, including scope information. |
| |
| <<Structure>>: |
| |
| * <<GraphML Root>>: Contains namespace declarations and keys for node and edge graphics |
| (using <<<yworks.com>>> extensions). |
| |
| * <<Graph>>: Defined with <<<edgedefault="directed">>>. |
| |
| * <<Nodes>>: Each node has an <<<id>>> (a unique number) and a <<<y:ShapeNode>>> with a |
| <<<y:NodeLabel>>> containing the artifact coordinates (e.g., <<<groupId:artifactId:type:version:scope>>>). |
| |
| * <<Edges>>: Defined with <<<source>>> and <<<target>>> node IDs, with a <<<y:PolyLineEdge>>> |
| containing a <<<y:EdgeLabel>>> for the scope (e.g., <<<compile>>>). |
| |
| <<Example>>: |
| |
| +---+ |
| <?xml version="1.0" encoding="UTF-8"?> |
| <graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:y="http://www.yworks.com/xml/graphml"> |
| <key for="node" id="d0" yfiles.type="nodegraphics"/> |
| <key for="edge" id="d1" yfiles.type="edgegraphics"/> |
| <graph id="dependencies" edgedefault="directed"> |
| <node id="955994360"><data key="d0"><y:ShapeNode><y:NodeLabel>org.apache.maven.extensions:maven-build-cache-extension:jar:1.2.1-SNAPSHOT:</y:NodeLabel></y:ShapeNode></data></node> |
| <node id="2058879732"><data key="d0"><y:ShapeNode><y:NodeLabel>net.openhft:zero-allocation-hashing:jar:0.27ea0:compile</y:NodeLabel></y:ShapeNode></data></node> |
| <edge source="955994360" target="2058879732"><data key="d1"><y:PolyLineEdge><y:EdgeLabel>compile</y:EdgeLabel></y:PolyLineEdge></data></edge> |
| <node id="1889106580"><data key="d0"><y:ShapeNode><y:NodeLabel>org.apache.maven.wagon:wagon-webdav-jackrabbit:jar:3.5.3:compile</y:NodeLabel></y:ShapeNode></data></node> |
| <node id="1817415346"><data key="d0"><y:ShapeNode><y:NodeLabel>org.apache.jackrabbit:jackrabbit-webdav:jar:2.14.4:compile</y:NodeLabel></y:ShapeNode></data></node> |
| <edge source="1889106580" target="1817415346"><data key="d1"><y:PolyLineEdge><y:EdgeLabel>compile</y:EdgeLabel></y:PolyLineEdge></data></edge> |
| </graph> |
| </graphml> |
| +---+ |
| |
| <<Usage Example>>: |
| |
| +---+ |
| mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency-tree.graphml |
| +---+ |
| |
| <<Visualization>>: Open the GraphML file in yEd or Gephi to visualize the dependency graph. |
| |
| <<Use Case>>: Analyze complex dependency structures using graph visualization tools. |
| |
| {TGF (outputType=tgf)} |
| |
| <<Description>>: The Trivial Graph Format (TGF) is a simple text-based format for representing |
| graphs. It lists nodes followed by edges, with each node and edge described on a single line. |
| |
| <<Structure>>: |
| |
| * <<Nodes Section>>: Each line contains a unique node ID (a number) followed by the artifact |
| coordinates (e.g., <<<groupId:artifactId:type:version:scope>>>). |
| |
| * <<Separator>>: A line containing <<<#>>> separates nodes from edges. |
| |
| * <<Edges Section>>: Each line contains the source node ID, target node ID, and the scope |
| (e.g., <<<compile>>>). |
| |
| <<Example>>: |
| |
| +---+ |
| 1474640235 org.apache.maven.extensions:maven-build-cache-extension:jar:1.2.1-SNAPSHOT: |
| 788877168 net.openhft:zero-allocation-hashing:jar:0.27ea0:compile |
| 1662807313 org.apache.maven.wagon:wagon-webdav-jackrabbit:jar:3.5.3:compile |
| 1655562261 org.apache.jackrabbit:jackrabbit-webdav:jar:2.14.4:compile |
| 1894638973 commons-codec:commons-codec:jar:1.10:compile |
| # |
| 1474640235 788877168 compile |
| 1474640235 1662807313 compile |
| 1662807313 1655562261 compile |
| 1655562261 1894638973 compile |
| +---+ |
| |
| <<Usage Example>>: |
| |
| +---+ |
| mvn dependency:tree -DoutputType=tgf -DoutputFile=dependency-tree.tgf |
| +---+ |
| |
| <<Visualization>>: Convert TGF to other formats (e.g., DOT) using tools like <<<graphviz>>> or |
| custom scripts for visualization. |
| |
| <<Use Case>>: Lightweight format for simple graph processing or conversion to other graph formats. |
| |
| * Notes |
| |
| * <<Visualization Tools>>: |
| |
| * <<JSON>>: Parse with any JSON-compatible tool (e.g., Python's <<<json>>> module, JavaScript's <<<JSON.parse>>>). |
| |
| * <<DOT>>: Use Graphviz (<<<dot>>> command) to generate PNG, SVG, or other visual formats. |
| |
| * <<GraphML>>: Use yEd, Gephi, or other GraphML-compatible tools for visualization. |
| |
| * <<TGF>>: Use tools supporting TGF or convert to DOT/GraphML for visualization. |
| |