据我了解,当我执行
nrepl-jack-in
时,会加载 REPL 以及 project.clj 中定义的所有依赖项。 如果我随后更新project.clj以添加新的依赖项,我是否需要终止服务器并重新运行nrepl-jack-in
,或者有没有办法更新当前REPL中的依赖项?
更新:也许还有一些希望, 请参阅https://github.com/cemerick/pomegranate
以前:
简短的回答是肯定的 - 您必须重新启动 JVM 进程。
我知道没有好的方法可以更新实时 repl 中的依赖项。 Leiningen(由 nrepl-jack-in 调用)将管理依赖项并仅在重新启动时设置类路径。试图做一些充满活力和聪明的事情是非常脆弱的。
下面删除的文字实际上是真实的,但经过片刻的反思,似乎是一个糟糕的建议,我已将其标记为这样......
如果您有本地依赖项(例如 jar 文件),您可以在 repl 中使用长期 deprecated 函数
add-classpath
重新启动 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
文件,然后 重新加载您的会话。
在石榴出现之前,我编写了自己的库来动态加载依赖项。
https://github.com/bmillare/dj
在 lein2 发布以及它在幕后如何使用 pomegrante 之后,我重写了 dj 以在下面使用它。因此,即使您不使用“dj”,它也可能作为参考来了解它的用途。
add-lib
现在应该足够了。它从 REPL 下载新的库。