19

据我了解,当我执行时,nrepl-jack-inREPL 会与 project.clj 中定义的所有依赖项一起加载。如果我然后更新 project.clj 以添加新的依赖项,我需要终止服务器并重新运行nrepl-jack-in还是有办法更新当前 REPL 中的依赖项?

4

3 回答 3

7

更新:也许有一些希望,见https://github.com/cemerick/pomegranate

之前:

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

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

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

如果您有本地依赖项(例如 jar 文件),您可能会在 repl 中使用长期不推荐使用的功能。add-classpath但是您将进入 java 类加载器的龙出没的沼泽。

于 2013-02-08T19:59:01.390 回答
2

重新启动 REPL 似乎是最简单的方法。这可以通过以下方式完成:

M-x cider-restart

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


另一种(非常方便)的方法是使用 clj-refactor。添加工件C-c m a pcljr-add-project-dependency)将提示您输入所需的版本,自动将新依赖项放入您的project.clj文件中,并重新加载您的会话

于 2016-06-24T23:29:57.210 回答
1

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

https://github.com/bmillare/dj

在发布了 lein2 以及它如何在幕后使用 pomegrante 之后,我重写了 dj 以在下面使用它。所以,即使你不使用 'dj',它也可能是一个有用的参考,看看它在做什么。

于 2013-02-09T00:30:48.480 回答