A Leiningen plugin to reject dependency graphs with common user surprises.
(defproject sample "0.0.1" :dependencies [[org.clojure/clojure "1.4.0"] [com.cemerick/friend "0.0.9"] [noir "1.3.0-beta9"]])
Normally with lein this project will use [ring/ring-core "1.0.2"] due to friend, and will use [ring/ring-jetty "1.1.0"] due to noir. These version do not work together and resulted in issue https://github.com/cemerick/friend/issues/15.
Using lein-pedantic will produce a message and fail the dependency resolution.
Failing dependency resolution because: [com.cemerick/friend "0.0.9"] -> [ring/ring-core "1.0.2"] is overruling [noir "1.3.0-beta9"] -> [compojure "1.0.4"] -> [ring/ring-core "1.1.0"] Please use [com.cemerick/friend "0.0.9" :exclusions [ring/ring-core]] to get [ring/ring-core "1.1.0"] or use [noir "1.3.0-beta9" :exclusions [ring/ring-core]] to get [ring/ring-core "1.0.2"].
lein-pedantic requires leiningen 2.
[lein-pedantic "0.0.3"] into the
:plugins vector of your
:user profile. It automatically hooks into leiningen and will run any time leiningen tries to pull dependencies.
If you would prefer a warning then failure then add
:pedantic :warn to the project.clj. The
lein repl task will default to a warning, as it adds dependencies to the project that you do not have control over.
The rules lein-pedantic uses to fail a dependency resolution are approximately:
A top level dependency is overruled by another version.
A transitive dependency is overruled by an older version.
Copyright © 2012 Nelson Morris
Distributed under the Eclipse Public License, the same as Clojure.