是否可以将新内容添加到类路径(例如编辑 project.clj 和 running lein deps
),然后将其导入现有的 Clojure 会话?
也就是说,无需断开连接然后再次连接。
是否可以将新内容添加到类路径(例如编辑 project.clj 和 running lein deps
),然后将其导入现有的 Clojure 会话?
也就是说,无需断开连接然后再次连接。
您可以使用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 本身才能使用它。
我假设clojure 会话您的意思是 REPL 由lein repl
.
对您的问题的简短回答是“不”——您不能这样做。
JVM 支持Classloaders来提供这种动态加载功能,而 clojure 利用这些来支持动态类定义deftype
gen-class
等。
当您考虑必须展开并重新构建已在使用的类加载器时,将新的 3rd 方类(可能是新的库 jar)添加到类路径中会非常复杂。
有关clojure 的类加载的更多详细信息,请参阅此问题