在使用nrepl.el时如何更新Clojure依赖项?

时间:2013-02-08 19:03:47

标签: emacs clojure

据我所知,当我nrepl-jack-in时,会加载一个REPL以及project.clj中定义的所有依赖项。如果我然后更新project.clj以添加新的依赖项,我是否需要终止服务器并重新运行nrepl-jack-in或者是否有办法更新当前REPL中的依赖项?

3 个答案:

答案 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 pcljr-add-project-dependency) 将提示您想要的版本,自动放新 依赖于您的project.clj文件,重新加载会话