在Clojure REPL中动态加载依赖项

时间:2011-10-10 10:21:56

标签: maven clojure read-eval-print-loop leiningen

是否可以在 正在运行 Clojure REPL中下载并安装以前未指定的Maven依赖项?

我正在考虑一种相当常见的情况,即您希望为某些测试或可视化工具暂时快速提取依赖关系,但不想关闭当前的REPL会话。

例如,如果您想在当前的REPL会话中引入Incanter来绘制一些漂亮的数据图表,您可以使用以下内容:

(load-dependency "incanter" "incanter" "1.3.0-SNAPSHOT")

;; now do stuff with Incanter......

据推测,您必须从适当的存储库触发Maven或Leiningen中的依赖性解析/加载,但我不了解它们的内部结构,以了解这是否可能在运行时.......

2 个答案:

答案 0 :(得分:6)

Java的默认类加载器行为使这很困难,但pomegrenade (actually, pomegranate)声称能够做你想做的事。

答案 1 :(得分:5)

Alembic是一个leiningen插件,可以将此功能添加到repl。

直接引用自述文件:

  

Alembic是一个clojure库,允许您在运行的JVM实例中将jar提取到类路径中。您可以使用它以临时方式向正在运行的REPL添加依赖项,或者通过重新加载project.clj文件。

它还添加了一个(load-project)函数,用于解析project.clj并动态添加缺少的依赖项。