是否可以在类路径中添加新内容(例如编辑project.clj并运行lein deps
),然后将其导入现有的Clojure会话?
这是,无需断开然后再连接。
答案 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