3

IntelliJ IDEA 用の La Clojure プラグインを使用して clj ファイルをロードし、そのファイル内の関数を取得しています。私の Test.clj ファイルには次の内容があります。

(ns test.Test
  (:require [clojure.tools.logging :as logger])
 )

 (defn addx [a b c]
   (logger/debug "adding...")
   (+ a b c))

Clojure REPL コンソールで、次の方法でファイルをロードしようとしています。

(load-file "/home/.../test/Test.clj")

それは私に次のエラーを与えます:

FileNotFoundException クラスパスで clojure/tools/logging__init.class または clojure/tools/logging.clj を見つけることができませんでした: clojure.lang.RT.load (RT.java:443)

誰かが私が間違っていることを教えてもらえますか?

ありがとうございました。

4

1 に答える 1

2

エラーの原因は、クラスパス (Clojure REPL の開始に使用されるもの) にclojure.tools.loggingライブラリが含まれていないことです。Test.cljそのため、REPL をロードすると、必要なパッケージが見つからないため、エラーが発生します。

REPL を開始する方法はわかりませんが、残りの回答では、これが端末の通常の REPL であると想定しています (IntelliJ IDEA 自体からではありません。REPL が IntelliJ IDEA から開始された場合、それは正しいプロジェクトクラスパスで REPL を開始することになっているため、最後のものの構成ミスです-最初に確認するのはプロジェクト構成です)。

clojure.tools.loggingしたがって、これを修正するには、REPLのクラスパスにすべての依存関係 (この場合は - ) があることを確認してください。たとえば、おそらく最も簡単な方法はproject.clj、依存関係が宣言されている a を追加し、 Lieningen を使用して REPL を開始することです。project.cljトリックを行う必要最低限​​ の骨は次のとおりです。

(defproject my-project "0.0.1-SNAPSHOT"
  :dependencies [[org.clojure/tools.logging "0.3.1"]])

今、同じディレクトリからproject.clj

$ lein repl 
...
user=> (load-file "Test.clj")
#'test.Test/addx
user=> (test.Test/addx 13 9 20)
42

または、「純粋な Clojure REPL no Leiningen」に行きたい場合は、依存関係の jar ファイルをローカルに用意し (たとえば、Maven Centralからダウンロード)、REPL の起動時にそれらをクラスパスに追加する必要があります。

$ java -cp /path/to/clojure.jar:/path/to/tools.logging-0.3.1.jar clojure.main

通常は同じ結果が得られるはずです。

于 2015-10-15T14:41:46.420 に答える