2011-11-03 74 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" 
相關問題