据我了解,当我执行时,nrepl-jack-in
REPL 会与 project.clj 中定义的所有依赖项一起加载。如果我然后更新 project.clj 以添加新的依赖项,我需要终止服务器并重新运行nrepl-jack-in
还是有办法更新当前 REPL 中的依赖项?
3 回答
更新:也许有一些希望,见https://github.com/cemerick/pomegranate
之前:
简短的回答是肯定的——你必须重新启动 JVM 进程。
我知道没有好的方法来更新实时 repl 中的依赖项。Leiningen(由 nrepl-jack-in 调用)将管理依赖项并仅在重新启动时设置类路径。尝试做一些充满活力和聪明的事情是非常脆弱的。
下面被删除的文字实际上是真实的,但经过片刻的反思,我认为这是一个糟糕的建议,我将其标记为......
如果您有本地依赖项(例如 jar 文件),您可能会在 repl 中使用长期不推荐使用的功能。add-classpath
但是您将进入 java 类加载器的龙出没的沼泽。
重新启动 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
文件中,并重新加载您的会话。
在 pomegranate 存在之前,我编写了自己的库来动态加载依赖项。
https://github.com/bmillare/dj
在发布了 lein2 以及它如何在幕后使用 pomegrante 之后,我重写了 dj 以在下面使用它。所以,即使你不使用 'dj',它也可能是一个有用的参考,看看它在做什么。