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に依存しており、leinが作成したデフォルトのプロジェクトファイルは私の新しいプロジェクトを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 を使用) を使用しています。もちろん、Clojure 1.2.1 を使用するバージョン 1.6.2 の Leiningen 自体も使用しています。理想的な状況ではありませんが、少なくとも、すべての依存ライブラリを削除することなく、連続実行で機能します!

于 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.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)Vは、clojure 1.3を使用して、clojure1.2に対してコンパイルされたコードを実行しようとしていることを意味します。

ここで起こっているのは、clojure1.3をlib/devにプルするdev依存関係があるということです。lib/dev内のすべてのjarファイルがクラスパスに追加されます。Leiningenにはclojure1.2に対してコンパイルされたコードが含まれており、例外が発生します。

解決策:どのdev-dependencyがclojureに依存しているかを把握し、それを除外します。これは次のようになります [foo "1.2.0" :exclusions [org.clojure/clojure]]

どのdev-depをどのように把握しますか?試行錯誤、またはソースコードのproject.cljを確認します。

于 2012-05-29T06:22:14.340 に答える
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 1.6以降を実行していることを確認してください

古いJavaを搭載したシステムで実行しているときに、同様の問題が発生しました。

于 2011-11-03T18:25:16.217 に答える