2012-07-15 10:54:00 +02:00
sbt-dependency-graph
2011-11-15 16:01:32 +01:00
====================
2012-05-23 12:42:04 +02:00
Visualize your project's dependencies.
2011-11-15 16:01:32 +01:00
How To Use
----------
2014-12-12 18:01:24 +01:00
Since sbt-dependency-graph is an informational tool rather than one that changes your build, you will more than likely wish to
install it as a [global plugin] so that you can use it in any SBT project without the need to explicitly add it to each one. To do
this, add the plugin dependency to `~/.sbt/0.13/plugins/plugins.sbt` :
2011-11-15 16:36:33 +01:00
```scala
2015-03-30 08:12:31 +02:00
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.5")
2011-11-15 16:36:33 +01:00
```
2015-07-08 09:05:56 +02:00
Then, apply the plugin's settings in `~/.sbt/0.13/global.sbt` , the [global build configuration], by adding the following line:
2011-11-15 16:01:32 +01:00
```scala
2012-07-13 10:32:23 +02:00
net.virtualvoid.sbt.graph.Plugin.graphSettings
2011-11-15 16:01:32 +01:00
```
2015-07-08 09:05:56 +02:00
Note, that sbt-dependency-graph is not an [AutoPlugin ](http://www.scala-sbt.org/0.13/docs/Plugins.html#Creating+an+auto+plugin ) yet (until [#51 ](https://github.com/jrudolph/sbt-dependency-graph/issues/51 ) is fixed), so adding the above line to your global or project configuration is mandatory.
2012-07-13 10:32:23 +02:00
2013-08-26 12:53:03 +02:00
Tasks
-----
2012-05-23 12:35:49 +02:00
2012-10-22 10:30:22 +02:00
* `dependency-graph` : Shows an ASCII graph of the project's dependencies on the sbt console
* `dependency-graph-ml` : Generates a .graphml file with the project's dependencies to `target/dependencies-<config>.graphml` .
2012-05-23 12:35:49 +02:00
Use e.g. [yEd ](http://www.yworks.com/en/products_yed_about.html ) to format the graph to your needs.
2012-12-18 17:41:49 +01:00
* `dependency-dot` : Generates a .dot file with the project's dependencies to `target/dependencies-<config>.dot` .
Use [graphviz ](http://www.graphviz.org/ ) to render it to your preferred graphic format.
2012-10-22 10:30:22 +02:00
* `dependency-tree` : Shows an ASCII tree representation of the project's dependencies
* `what-depends-on <organization> <module> <revision>` : Find out what depends on an artifact. Shows a reverse dependency
tree for the selected module.
2012-10-27 12:28:40 +02:00
* `dependency-license-info` : show dependencies grouped by declared license
2012-05-23 12:35:49 +02:00
* `ivy-report` : let's ivy generate the resolution report for you project. Use
`show ivy-report` for the filename of the generated report
All tasks can be scoped to a configuration to get the report for a specific configuration. `test:dependency-graph` ,
for example, prints the dependencies in the `test` configuration. If you don't specify any configuration, `compile` is
assumed as usual.
2011-11-15 16:01:32 +01:00
2013-08-26 12:53:03 +02:00
Configuration settings
----------------------
* `filterScalaLibrary` : Defines if the scala library should be excluded from the output of the dependency-* functions.
If `true` , instead of showing the dependency `"[S]"` is appended to the artifact name. Set to `false` if
you want the scala-library dependency to appear in the output. (default: true)
* `dependencyGraphMLFile` : a setting which allows configuring the output path of `dependency-graph-ml` .
* `dependencyDotFile` : a setting which allows configuring the output path of `dependency-dot` .
* `dependencyDotHeader` : a setting to customize the header of the dot file (e.g. to set your preferred node shapes).
* `dependencyDotNodeLabel` : defines the format of a node label
(default set to `[organisation]<BR/><B>[name]</B><BR/>[version]` )
E.g. in `build.sbt` you can change configuration settings like this:
```scala
filterScalaLibrary := false // include scala library in output
dependencyDotFile := file("dependencies.dot") //render dot file to `./dependencies.dot`
```
2011-11-15 17:27:53 +01:00
Standalone usage
----------------
You can use the project without sbt as well by either depending on the library and calling
2012-10-22 10:30:22 +02:00
`IvyGraphMLDependencies.saveAsGraphML(IvyGraphMLDependencies.graph(reportFile), outputFile)` or by just getting the binary
2015-03-30 08:12:31 +02:00
and calling it like `scala sbt-dependency-graph-0.7.5.jar <ivy-report-xml-path> <target-path>` .
2011-11-15 16:01:32 +01:00
Inner Workings
--------------
2012-10-22 10:30:22 +02:00
sbt/Ivy's `update` task create ivy-report xml-files inside `.ivy2/cache` (in sbt 0.12.1:
2012-10-24 15:52:10 +02:00
`<project-dir>/target/resolution-cache/reports/<project-id>` ). You can
2011-11-15 17:27:53 +01:00
just open them with your browser to look at the dependency report for your project.
This project takes the report xml of your project and creates a graphml file out of it. (BTW,
ivy can create graphml files itself, but since I didn't want to spend to much time getting
sbt to call into Ivy to create graphs, I went with the easy way here)
2011-11-15 16:01:32 +01:00
2012-10-24 11:35:17 +02:00
Known issues
------------
2012-10-24 15:12:02 +02:00
* #19: There's an unfixed bug with graph generation for particular layouts. Workaround:
2012-10-24 11:35:17 +02:00
Use `dependency-tree` instead of `dependency-graph` .
2012-10-24 15:12:02 +02:00
* #12: Excluded dependencies will be shown in the graph in sbt < 0.12 , works with later versions
2012-10-24 11:35:17 +02:00
2012-10-22 10:30:22 +02:00
Credits
-------
* Matt Russell (@mdr) for contributing the ASCII graph layout.
2013-01-22 14:38:30 +01:00
* berleon (@berleon) for contributing rendering to dot.
2012-10-22 10:30:22 +02:00
2011-11-15 16:01:32 +01:00
License
-------
2012-05-23 12:42:04 +02:00
Copyright (c) 2011, 2012 Johannes Rudolph
2011-11-15 16:01:32 +01:00
2012-07-15 11:02:33 +02:00
Published under the [Apache License 2.0 ](http://en.wikipedia.org/wiki/Apache_license ).
2014-12-12 18:01:24 +01:00
[global plugin]: http://www.scala-sbt.org/0.13/tutorial/Using-Plugins.html#Global+plugins
[global build configuration]: http://www.scala-sbt.org/0.13/docs/Global-Settings.html