动态导入依赖项?

时间:2012-05-15 12:16:16

标签: clojure leiningen swank-clojure

是否可以在类路径中添加新内容(例如编辑project.clj并运行lein deps),然后将其导入现有的Clojure会话?

这是,无需断开然后再连接。

2 个答案:

答案 0 :(得分:5)

您可以使用pomegranate下载新库并在运行时将它们添加到类路径中。它不会直接从您的project.clj中读取,而是使用兼容的语法(使用Leiningen 2用于其自身依赖性解析的Aether库)。

用法如下(引用README的示例):

=> (add-dependencies
      :coordinates '[[incanter "1.2.3"]]
      :repositories (merge cemerick.pomegranate.aether/maven-central
                           {"clojars" "http://clojars.org/repo"}))

那就是说,你必须在你的初始类路径中使用石榴才能使用它。

答案 1 :(得分:1)

我假设通过 clojure会话表示由lein repl启动的REPL。

对你的问题的简短回答是否 - 你不能这样做。

JVM支持Classloaders提供此动态加载功能,而clojure利用这些功能来使用deftype gen-class等来支持动态类定义。

当你考虑到你必须放松并重新构建已经在使用的类加载器时,将新的第三方类(可能是一个新的库jar)添加到类路径会非常复杂。

有关clojure的类加载的详细信息,请参阅this question