据我所知,当我nrepl-jack-in
时,会加载一个REPL以及project.clj中定义的所有依赖项。如果我然后更新project.clj以添加新的依赖项,我是否需要终止服务器并重新运行nrepl-jack-in
或者是否有办法更新当前REPL中的依赖项?
答案 0 :(得分:6)
更新:也许有一些希望, 请参阅https://github.com/cemerick/pomegranate
此前:
简短的回答是肯定的 - 您必须重新启动JVM进程。
我知道没有更好的方法来更新实时repl中的依赖项。 Leiningen(由nrepl-jack-in调用)将管理依赖项并仅在重新启动时设置类路径。尝试做一些充满活力和聪明的事情是非常脆弱的。
以下被删除的文字事实上是正确的,但是片刻的反思似乎是如此糟糕的建议我已经将其标记为......
如果您有本地依赖项(例如jar文件),则可以在repl处使用长时间已弃用函数 add-classpath
。但是你将进入java类加载器的龙肆虐沼泽。
答案 1 :(得分:1)
在石榴存在之前,我编写了自己的库来动态加载依赖项。
https://github.com/bmillare/dj
lein2发布之后以及它如何使用pomegrante,我重写了dj以便在下面使用它。所以,即使你不使用'dj',它也可能是一个有用的参考,看看它在做什么。
答案 2 :(得分:0)
重新启动REPL似乎是最简单的方法。这可以做到 用:
M-x cider-restart
这也似乎完成了lein deps
。所以整个过程
添加新依赖项只需要添加require
您的project.clj
然后调用cider-restart
。
另一种(非常方便)的方式是使用
clj-refactor。
添加工件(C-c m a p
或cljr-add-project-dependency
)
将提示您想要的版本,自动放新
依赖于您的project.clj
文件,重新加载会话。