Lein cria o classpath com uma versão diferente de um jar

Quando lein constrói classpath com uma versão diferente de um jar do que a especificada em project.clj, isso provavelmente é causado por outro jar tendo-o como uma dependência e sendo carregado antes do seu código.

Exemplo:

(defproject blah "0.1.0-SNAPSHOT"
:description "blah"
:url "http://www.blah.com"
:dependencies [[org.clojure/clojure "1.4.0"]
[noir "1.2.2"]])

Então…

$ lein classpath
(...):~/.m2/repository/org/clojure/clojure/1.3.0/clojure-1.3.0.jar:(...)

O quê? Eu quero clojure 1.4.0, por que lein usa 1.3.0?

Diagnosticando:

$ lein deps :tree
[noir "1.2.2"]
(...)
[org.clojure/clojure "1.3.0"]

Claramente, noirrequer clojure 1.3.0. Para corrigi-lo, você precisa excluir o clojure das dependências noir:

(defproject blah "0.1.0-SNAPSHOT"
:description "blah"
:url "http://www.blah.com"
:dependencies [[org.clojure/clojure "1.4.0"]
[noir "1.2.2" :exclusions [org.clojure/clojure]]])

E agora Lein faz o que você quer.

$ lein classpath
(...):/Users/tomo/.m2/repository/org/clojure/clojure/1.4.0/clojure-1.4.0.jar:(...)