java - 在clojure中制作一个插件系统

标签 java clojure jvm lisp

我想知道是否有可能以及如何实现模块系统。

这是它如何工作的例子:我有一些文件夹(例如 modules),这个文件夹有一堆导出一些变量的 clojure 文件(例如 nameregex), 所有模块都加载到一个列表中,因此可以迭代并从中删除模块。

最佳答案

您可以做的最简单的事情就是使用load-file 一个一个地加载所有这些文件。 https://clojuredocs.org/clojure.core/load-file

否则你可以预编译插件的命名空间并使用一些 java 的本地技术加载它们(我不太了解,但我想有一些不错的库)

更新: 对于一些名为“/my/path”的目录,它可能如下所示:

(run! #(load-file (.getAbsolutePath %))
      (rest (file-seq (java.io.File. "/my/path"))))

注意,file seq 递归遍历目录,并包括所有文件(不仅是*.clj)。也许你必须过滤它们:

(run! #(load-file (.getAbsolutePath %))
      (filter
       #(clojure.string/ends-with? (.getName %) ".clj")
       (rest (file-seq (java.io.File. "/my/path")))))

关于java - 在clojure中制作一个插件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127754/

相关文章:

java - 如何更改 Maven 登陆页面

java - 如何在 CSS 中为 JavaFX Scene Builder 节点和类设计 JFoenix 风格?

java - servlet 中的图像无法用浏览器打开

clojure - conda , condi , conde ,condu

unit-testing - 如何在 Clojure 中对副作用函数进行单元测试?

Java Swing 内存使用

jvm - 如何强制 HotSpot JVM 覆盖堆转储文件?

java - 从程序中启动网站,并将数据输入到特定字段

java - 创建Java虚拟机失败

angularjs - Cemerick Friend 和单页应用程序