sbt, the interactive build tool
Go to file
Johannes Rudolph 1a20eee73c bump version to 0.7.0-RC2 2012-10-23 11:37:50 +02:00
notes proper distinction between what is a moduleid and what is extra module info 2012-10-23 11:26:11 +02:00
project use sbt-cross-building 0.7.0-RC2 2012-10-20 13:05:22 +02:00
src proper distinction between what is a moduleid and what is extra module info 2012-10-23 11:26:11 +02:00
.gitignore initial version 2011-11-15 16:06:02 +01:00
LICENSE readme and licensing 2011-11-15 16:07:18 +01:00
NOTICE more README stuff 2012-05-23 12:39:52 +02:00
README.md prepare readme for 0.7.0 2012-10-22 10:30:22 +02:00
build.sbt Merge commit 'refs/pull/10' 2012-10-21 18:59:36 +02:00
project.sbt bump version to 0.7.0-RC2 2012-10-23 11:37:50 +02:00
publish.sbt add information for publishing to sonatype 2012-02-13 11:18:25 +01:00

README.md

sbt-dependency-graph

Visualize your project's dependencies.

How To Use

For sbt 0.11/0.12, add sbt-dependency-graph as a dependency in project/plugins.sbt:

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.0")

Then, add the following to your <project-root>/build.sbt (that's not project/build.sbt!) as a standalone line:

net.virtualvoid.sbt.graph.Plugin.graphSettings

OR, alternatively, if you use the full configuration, i.e. you define your build definition in project/build.scala, for example, to define a multi-module project, you should add

.settings(net.virtualvoid.sbt.graph.Plugin.graphSettings: _*)

to each of the project definitions for which you want to use the plugin. The definition of your project should then look approximately this way:

object MyBuild extends Build {
  val proj =
    Project("my-project", file("base"))
      .settings(net.virtualvoid.sbt.graph.Plugin.graphSettings: _*)
}

Check out the example project for a skeleton build setup.

Tasks & Settings

  • 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. Use e.g. yEd to format the graph to your needs.
  • 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.
  • dependency-graph-ml-file: a setting which allows configuring the output path of dependency-graph-ml.
  • 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.

Standalone usage

You can use the project without sbt as well by either depending on the library and calling IvyGraphMLDependencies.saveAsGraphML(IvyGraphMLDependencies.graph(reportFile), outputFile) or by just getting the binary and calling it like scala sbt-dependency-graph-0.7.0.jar <ivy-report-xml-path> <target-path>.

Inner Workings

sbt/Ivy's update task create ivy-report xml-files inside .ivy2/cache (in sbt 0.12.1: <project-dir>/target/resolution-cache/reports/<project-id>. You can 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)

Credits

  • Matt Russell (@mdr) for contributing the ASCII graph layout.

License

Copyright (c) 2011, 2012 Johannes Rudolph

Published under the Apache License 2.0.