在clojure中创建一个插件系统

问题描述 投票:1回答:2

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

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

java clojure jvm lisp
2个回答
2
投票

你能做的最简单的事情就是用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")))))

0
投票

riemann,有一个插件系统设计,它能够通过其初始化脚本在类路径中加载jar文件。功能允许遍历类路径,寻找随插件一起分发的小元文件,提示需要。

© www.soinside.com 2019 - 2024. All rights reserved.