在Clojure REPL中动态加载依赖项

mik*_*era 7 clojure maven leiningen read-eval-print-loop

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

我想到了一个相当常见的情况,你想要为某些测试或可视化工具暂时快速引入依赖关系,但不想关闭当前的REPL会话.

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

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

;; now do stuff with Incanter......
Run Code Online (Sandbox Code Playgroud)

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

Joo*_*aat 6

Java的默认类加载器行为使这很困难,但是pomegrenade(实际上是石榴)声称能够做你想要的.


clo*_*ows 5

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

直接引用自述文件:

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

它还添加了一个(load-project)功能,可以动态解析project.clj并添加缺少的依赖项.