leiningen没有在os x上工作

时间:2011-11-03 14:14:59

标签: clojure osx-lion leiningen

当我尝试在我的os x lion上运行leiningen时,我收到以下错误。安装按照github(README)上的说明完成。任何人都可以给我一个暗示吗?

我通过谷歌找到的唯一可能的解决方案是运行lein clean,但对于我来说,这个消息也没有。

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V
at clojure.lang.Util.runtimeException(Util.java:165)
at clojure.lang.Compiler.eval(Compiler.java:6476)
at clojure.lang.Compiler.eval(Compiler.java:6431)
at clojure.core$eval.invoke(core.clj:2795)
at clojure.main$eval_opt.invoke(main.clj:296)
at clojure.main$initialize.invoke(main.clj:315)
at clojure.main$script_opt.invoke(main.clj:339)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:436)
at clojure.lang.Var.invoke(Var.java:409)
at clojure.lang.AFn.applyToHelper(AFn.java:167)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)
Caused by: java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V
at leiningen.util.paths$legacy_native_path.<clinit>(paths.clj:32)
at leiningen.util.paths__init.load(Unknown Source)
at leiningen.util.paths__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at clojure.lang.RT.loadClassForName(RT.java:2030)
at clojure.lang.RT.load(RT.java:417)
at clojure.lang.RT.load(RT.java:398)
at clojure.core$load$fn__4610.invoke(core.clj:5386)
at clojure.core$load.doInvoke(core.clj:5385)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5200)
at clojure.core$load_lib.doInvoke(core.clj:5237)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:602)
at clojure.core$load_libs.doInvoke(core.clj:5271)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:602)
at clojure.core$require.doInvoke(core.clj:5352)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at leiningen.core$loading__4414__auto__.invoke(core.clj:1)
at leiningen.core__init.load(Unknown Source)
at leiningen.core__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at clojure.lang.RT.loadClassForName(RT.java:2030)
at clojure.lang.RT.load(RT.java:417)
at clojure.lang.RT.load(RT.java:398)
at clojure.core$load$fn__4610.invoke(core.clj:5386)
at clojure.core$load.doInvoke(core.clj:5385)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5200)
at clojure.core$load_lib.doInvoke(core.clj:5237)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:602)
at clojure.core$load_libs.doInvoke(core.clj:5271)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:604)
at clojure.core$use.doInvoke(core.clj:5363)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at user$eval1.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6465)
... 11 more

5 个答案:

答案 0 :(得分:1)

我同意cieplak - 我刚才遇到了同样的问题,lein依赖于Clojure 1.2.1并且它创建的默认项目文件使我的新项目依赖于Clojure 1.3.0。当我运行'lein test'来运行新项目的测试时,Clojure 1.3.0被下载并添加到类路径中,然后我收到了你在上面说的错误。

解决方案 - 在我的新项目中删除所有下载的jar(在'libs'中),更改project.clj以依赖Clojure 1.2.1来匹配lein并重新运行'lein test'下载依赖项。这一次,没有Clojure版本冲突而且没有错误:)

更正 - 这只适用于每次'lein test'运行之前:( :(

更新 - 我通过确保项目中的所有依赖项使用相同版本的Clojure - 1.2.1来解决我的问题。主要的依赖是Midje,所以我使用的是1.2.0(使用1.2.1的Clojure),当然Leiningen本身也是使用Clojure 1.2.1的版本1.6.2。不是理想的情况,但至少它可以连续运行而不必删除所有依赖库!

答案 1 :(得分:1)

这是一种快速判断您是否具有使用不同版本的Clojure的依赖项的好方法:

lein deps :tree | grep -C 1 "org\.clojure\/clojure"

答案 2 :(得分:0)

确保您运行的是java 1.6+

在使用过时java的系统上运行时遇到了类似的问题。

答案 3 :(得分:0)

此刻我遇到同样的问题。我刚刚使用Lein安装了Incanter。我通过删除〜/ .lein / plugins / incanter-1.3.0-SNAPSHOT.jar来修复它。

据我所知,错误是由不同版本的Clojure上的依赖冲突引起的。在我的情况下,Incanter依赖于Clojure-1.3,而我的Lein使用1.2,而我安装的clojure是1.4。

答案 4 :(得分:0)

在所有情况下,异常java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V表示您正在尝试使用clojure 1.3运行针对clojure 1.2编译的代码。

这里发生的事情是你有一个dev-dependency,它将clojure 1.3引入lib / dev。 lib / dev中的所有jar都被添加到类路径中。 Leiningen包含针对clojure 1.2编译的代码,您将获得例外。

解决方案:找出哪个dev-dependency依赖于clojure,并将其排除。这看起来像 [foo "1.2.0" :exclusions [org.clojure/clojure]]

你如何找出哪个dev-dep?试用和错误,或者在源代码中查看他们的project.clj。