2011-11-03 71 views
2

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

我通过google找到的唯一可能的解决方案是运行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 
+0

是否使用自制?你有没有尝试过使用那里提供的leiningen版本? –

+0

你设法解决这个问题吗?我遇到[类似问题](http:// stackoverflow。COM /问题/ 8439589/JAVA琅的NoSuchMethodError-的Clojure琅keywordlookupsite-时运行,蕾宁) –

回答

1

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

解决方案 - 在我的新项目中删除所有下载的罐子(在“库”),改变project.clj依靠的Clojure 1.2.1匹配雷音并重新运行“雷音测试”来下载依赖。这一次,没有Clojure的版本冲突,并没有错误:)

修正 - 这只能如果你“雷音测试” :(:(

更新的每次运行前做到这一点 - 我已让固定我的问题确定我项目中的所有依赖项都使用相同版本的Clojure - 1.2.1。主要的依赖项是Midje,所以我使用的是1.2.0(它使用Clojure的1.2.1),当然Leiningen本身在版本中1.6.2也使用Clojure 1.2.1不是一个理想的情况,但至少它可以连续运行而不必删除所有依赖库!

0

确保您正在运行的Java 1.6+

与过时的Java系统运行时,我有过类似的问题。

0

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

从我所知道的,错误是由不同版本的Clojure上的依赖冲突引起的。就我而言,Incanter依靠Clojure-1.3,而我的Lein使用1.2,而我安装的clojure是1.4。

0

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

这里发生了什么是你有一个dev-dependency将clojure 1.3拉入到lib/dev中。 lib/dev中的所有jar都添加到classpath中。 Leiningen包含针对clojure 1.2编译的代码,并且您会得到例外。

解决方案:找出哪个开发依赖依赖clojure,并排除它。这看起来像 [foo "1.2.0" :exclusions [org.clojure/clojure]]

你怎么知道哪个dev-dep?试验和错误,或者通过在他们的源代码中查看他们的project.clj。

1

这里是一个伟大的方式,如果你有一个使用不同版本的Clojure的依赖迅速告知:

lein deps :tree | grep -C 1 "org\.clojure\/clojure" 
相关问题