欢迎!请参阅关于页面,了解更多关于如何工作的信息。
假设有一个Java应用已经在classpath上存在Clojure的.jar文件。并且有一个文件目录/home/me/clojure-extensions/包含了.clj文件,结构等同于一个普通的Clojure源代码目录,它不在应用的classpath中,且不能加入classpath,因为它可配置且不是应用的一部分。
.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/添加到classpath。
要从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"));
然后使用相同的设施在...中调用函数。
...