30
votes

I understand that lein deps :tree displays a dependency tree of all the project dependencies (implicit and explicit). However, "each dependency is only shown once within a tree." I'd really like to see a tree where this wasn't the case, and that if libraries A and B require library X, library X shows up under both A and B.

Does anyone know how to do this with lein or some other tool?

3

3 Answers

41
votes

This can now be done using leiningen by lein deps :tree. Note the space between deps and :tree.

40
votes

You can generate Maven's POM out of Leiningen's project definition and then use Maven's dependency:tree plugin with a verbose option, like this:

$ lein pom
$ mvn dependency:tree -Dverbose=true 

This will list dependencies omitted for various reasons, e.g.:

|  +- ring:ring-core:jar:1.4.0:compile
|  |  +- (org.clojure:clojure:jar:1.5.1:compile - omitted for conflict with 1.7.0)
|  |  +- (org.clojure:tools.reader:jar:0.9.1:compile - omitted for conflict with 0.10.0-alpha3)
|  |  +- (ring:ring-codec:jar:1.0.0:compile - omitted for duplicate)

For more options to dependency:tree see its documentation.

3
votes

This can be done without Leiningen using tools.deps. With a minimal deps.edn file like:

{:deps {}}

Then view the tree with:

% clj -Stree
org.clojure/clojure 1.10.1
  org.clojure/spec.alpha 0.2.176
  org.clojure/core.specs.alpha 0.2.44