2

当我尝试在我的 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
4

5 回答 5

1

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

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

更正 - 只有在每次运行 'lein test' 之前这样做才有效 :( :(

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

于 2012-01-04T21:05:37.620 回答
1

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

lein deps :tree | grep -C 1 "org\.clojure\/clojure"
于 2013-01-03T01:34:01.543 回答
0

确保您正在运行 java 1.6+

在具有过时 java 的系统上运行时,我遇到了类似的问题。

于 2011-11-03T18:25:16.217 回答
0

我现在有同样的问题。我刚刚使用 Lein 安装了 Incanter。我通过删除 ~/.lein/plugins/incanter-1.3.0-SNAPSHOT.jar 来修复它。

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

于 2011-11-15T22:55:42.617 回答
0

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

这里发生的是你有一个开发依赖,它将 clojure 1.3 引入 lib/dev。lib/dev 中的所有 jars 都被添加到类路径中。Leiningen 包含针对 clojure 1.2 编译的代码,您会得到异常。

解决方案:找出依赖于 clojure 的开发依赖项,并将其排除在外。这看起来像 [foo "1.2.0" :exclusions [org.clojure/clojure]]

您如何确定哪个 dev-dep?反复试验,或者在他们的源代码中查看他们的 project.clj。

于 2012-05-29T06:22:14.340 回答