5

ユーザー定義の Clojure スクリプトが Java アプリと対話できるようにしたいと考えています。問題は、Clojure スクリプトが配置される場所が事前にわからないため、アプリを実行するときにクラスパスに含めることができないことです。

クラスパスの外から Clojure スクリプトを動的にロードするにはどうすればよいですか?

簡単な例を試しました:

RT.loadResourceScript("test.clj");
Var foo = RT.var("user", "foo");
Object result = foo.invoke("Hi", "there");
System.out.println(result);

次のような test.clj を使用します。

(ns user)

(defn foo [a b]
    (str a " " b))

しかし、運がありません。

RT.makeClassLoader()または、返されたローダーを使用してclojureファイルをロードすることと関係があると思いRT.baseLoader()ますが、動作させることができないようです。(私は を取得し続けClassNotFoundます) おそらく の javadoc をいじることができましたclojure.lang.RTが、単にそれらを見つけることができませんでした。

4

2 に答える 2

6

試すclojure.lang.Compiler.loadFile(String file)

于 2010-07-30T15:02:11.200 に答える
1

それらがクラスパス内のものに依存している限り、ファイルを文字列として読み取って評価することができます。

(def content "(ns user) (defn foo [a b] (str a \" \" b))")
(map eval (read-string (str \( content \))))

read-string はストリームから 1 つのオブジェクトを読み取るため、すべてをリストにラップして 1 つのオブジェクトにする必要があります。

于 2010-07-30T14:34:24.527 に答える