3

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

也就是说,无需断开连接然后再次连接。

4

2 回答 2

5

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

用法看起来像这样(引用自述文件的例子):

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

也就是说,您必须在初始类路径中包含 pomegranate 本身才能使用它。

于 2012-05-15T13:33:52.310 回答
1

我假设clojure 会话您的意思是 REPL 由lein repl.

对您的问题的简短回答是“不”——您不能这样做。

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

当您考虑必须展开并重新构建已在使用的类加载器时,将新的 3rd 方类(可能是新的库 jar)添加到类路径中会非常复杂。

有关clojure 的类加载的更多详细信息,请参阅此问题

于 2012-05-15T13:30:16.910 回答