欢迎!有关如何使用本站的更多信息,请参阅 关于 页面。
给定一个已经包含 Clojure 的 .jar 文件的 Java 应用程序。以及一个文件目录 /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/。
要从 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"));
然后使用相同的设施在任何地方调用一个函数。