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()RT.baseLoader()使用返回的加载程序加载 clojure 文件有关,但我似乎无法使其工作。(我不断得到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 从流中读取一个对象,因此您需要将所有内容包装在一个列表中以使其成为一个对象。

于 2010-07-30T14:34:24.527 回答