欢迎!请查看关于页面以了解更多关于该平台如何工作的信息。
给定一个Java应用程序,其中类路径已有Clojure的.jar文件。还有一个文件目录/home/me/clojure-extensions/,其中包含.clj文件,其结构类似于一个普通的Clojure源目录,不在应用程序的类路径上,也无法将其添加到类路径,因为它是可以配置的,并非应用程序的一部分。
.jar
/home/me/clojure-extensions/
.clj
如何从Java代码中调用函数 myns.core/myfn?以便加载/home/me/clojure/extensions/myns/core.clj及其所有依赖文件?以便在Java调用再次发起时,如果这些文件被更改则重新加载这些文件?
myns.core/myfn
/home/me/clojure/extensions/myns/core.clj
根据您描述的场景,您需要将/home/me/clojure-extensions/添加到类路径中。
要调用Clojure,您可以使用Java API
https://clojure.github.io/clojure/javadoc/clojure/java/api/Clojure.html
对于重载,您需要通过Java API调用来明确表示
(require 'whatever :reload-all)
该调用将类似于以下内容
// this can be done once, statically IFn require = Clojure.var("clojure.core", "require"); // to reload require.invoke(Clojure.read("whatever"), Clojure.read(":reload-all"));
然后使用相同的工具来调用任何函数。