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

问题描述 投票:0回答:4

据我了解,当我执行

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

emacs clojure
4个回答
7
投票

更新:也许还有一些希望, 请参阅https://github.com/cemerick/pomegranate

以前:

简短的回答是肯定的 - 您必须重新启动 JVM 进程。

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

下面删除的文字实际上是真实的,但经过片刻的反思,似乎是一个糟糕的建议,我已将其标记为这样......

如果您有本地依赖项(例如 jar 文件),您可以在 repl 中使用长期 deprecated 函数

add-classpath
。但你将进入 java 类加载器的龙出没的沼泽。


4
投票

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

M-x cider-restart

这似乎也实现了

lein deps
。 所以整个过程 添加新依赖项只需将
require
添加到 您的
project.clj
,然后调用
cider-restart


另一种(非常方便)的方法是使用 clj 重构。 添加 artifact

C-c m a p
cljr-add-project-dependency
) 会提示你想要的版本,自动把新的 依赖于您的
project.clj
文件,然后 重新加载您的会话


1
投票

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

https://github.com/bmillare/dj

在 lein2 发布以及它在幕后如何使用 pomegrante 之后,我重写了 dj 以在下面使用它。因此,即使您不使用“dj”,它也可能作为参考来了解它的用途。


0
投票

add-lib
现在应该足够了。它从 REPL 下载新的库。

Clojure 1.12.0-alpha2

© www.soinside.com 2019 - 2024. All rights reserved.