java.lang.NoSuchMethodError:运行Leiningen时的clojure.lang.KeywordLookupSite

时间:2011-12-09 00:23:59

标签: java clojure leiningen

我刚刚下载了Leiningen,但我无法运行它。下载自己的Jar存档后,脚本失败并出现java错误。通过运行bash -x lein我可以看到它挂在这一行:

+ exec java -Xbootclasspath/a:/home/andrea/.m2/repository/org/clojure/clojure/1.2.1/clojure-1.2.1.jar -client -Dleiningen.original.pwd=/home/andrea/bin -cp /home/andrea/.clojure/clojure.jar:::::test/:src/:resources/:/home/andrea/.lein/self-installs/leiningen-1.6.2-standalone.jar clojure.main -e '(use '\''leiningen.core)(-main)' /dev/null

产生:

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)

有趣的是,失败的不是Java调用,而是片段'(use '\''leiningen.core)(-main)'。没有它运行该行实际上是一个工作的clojure REPL。 leiningen-1.6.2-standalone.jar似乎走在了正确的道路上。有任何想法吗?我是Java和Clojure的新手......

2 个答案:

答案 0 :(得分:2)

根据参考文献[1],您需要将Clojure主页添加到类路径中。

echo "export CLOJURE_HOME=$HOME/Opt/clojure
export CLASSPATH=$CLASSPATH:$CLOJURE_HOME" >> $HOME/.profile

[1] http://myminutes.wordpress.com/2011/12/01/clojure-lein-gives-error-exception-in-thread-main-java-lang-runtimeexception-java-lang-nosuchmethoderror-clojure-lang-keywordlookupsite/

答案 1 :(得分:1)

Chui Tey的回答指向了正确的方向。但是,如果您没有独立的Clojure安装,而是仅使用Leiningen来引导您的项目,则应该将Leiningen独立JAR添加到类路径中。

因此:

export CLASSPATH="$CLASSPATH:$HOME/.lein/self-installs/leiningen-VERSION-standalone.jar"