[英]How do I dynamically load a Clojure script from outside of my classpath from java?
我希望启用用户定义的Clojure脚本来与我的Java App进行交互。 问题是,我事先并不知道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
)我可能会混淆clojure.lang.RT
的javadoc,但我根本找不到它们。
试试clojure.lang.Compiler.loadFile(String file)
只要它们依赖于类路径中的东西,你可以做的就是将文件作为字符串读取并进行评估,
(def content "(ns user) (defn foo [a b] (str a \" \" b))")
(map eval (read-string (str \( content \))))
read-string从流中读取一个对象,因此您需要在列表中包含everthing以使其成为一个对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.