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

Emacs 使用nrepl.el时,如何更新Clojure依赖项?,emacs,clojure,Emacs,Clojure,据我所知,当我执行nrepl jack in时,将加载REPL以及project.clj中定义的所有依赖项。如果我随后更新project.clj以添加一个新的依赖项,我是否需要关闭服务器并重新运行nrepl jack in,或者是否有方法更新当前REPL中的依赖项?更新:也许有希望, 请参见 以前: 简而言之,答案是肯定的——您必须重新启动JVM进程 我知道没有好的方法来更新live repl中的依赖项。Leiningen(由nrepl jack in调用)将只在重新启动时管理依赖项并设置类路径

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

更新:也许有希望, 请参见

以前:

简而言之,答案是肯定的——您必须重新启动JVM进程

我知道没有好的方法来更新live repl中的依赖项。Leiningen(由nrepl jack in调用)将只在重新启动时管理依赖项并设置类路径。试图做一些充满活力和聪明的事情是非常脆弱的

下面删掉的文字事实上是正确的,但经过片刻的思考,似乎是如此糟糕的建议,我已将其标记为


如果您有一个本地依赖项(例如jar文件),您可以在repl中使用长时间的弃用的函数
添加类路径
。但您将进入java类加载器的恶龙出没的沼泽。

在石榴存在之前,我编写了自己的库来动态加载依赖项


在lein2的发布以及它如何在封面下使用柚子之后,我重写了dj,在封面下使用它。因此,即使您不使用“dj”,它也可能是一个有用的参考,可以查看它的功能。

重新启动REPL似乎是最简单的方法。这是可以做到的 与:

这似乎也完成了一个
lein-deps
。所以整个过程 添加一个新的依赖项只需要将
require
添加到 您的
project.clj
,然后调用
cider restart


另一种(非常方便的)方法是使用 . 添加工件(
C-cmap
cljr添加项目依赖项
) 将提示输入所需版本,自动放入新版本
依赖于
project.clj
文件,并且重新加载会话

当重新加载苹果酒过程的麻烦远大于石榴的麻烦时,cemeric/石榴的有用性是否会出现?@ErikAllik是的。例如,在数据分析上下文中进行修补/探索时,可能会在数据清理、规范化等方面建立一系列“状态”。不必重新运行所有工作以达到该状态,只需尝试不同的模型或可视化库,这可能是一种很好的方便。当然,进行适当的可再现性分析需要重新启动并努力使事情干净地重新运行。对我来说,运行
cider restart
不会更新project.clj中描述的依赖关系。@Micah Elliott,你能详细说明第二种方法吗?我不太明白。cljr add project DEP对于添加新的DEP非常有效,但是我运行的cider repl没有重新加载,并且无法访问新的依赖项。虽然我没有使用clj重构。。不确定它与苹果酒repl重启有什么关系。这两个都不适合我。我必须
戒掉苹果酒
,然后再
把苹果酒插进去
。clj重构使得向project.clj添加依赖项更加方便。
M-x cider-restart