欢迎!请参阅关于页面以了解更多有关其运作方式的信息。
假设有一个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/。
/home/me/clojure-extensions/。
为了从Java调用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"));
然后,请使用相同的设施在需要的地方调用函数。