【问题标题】:How do I update Clojure dependencies when working with nrepl.el?使用 nrepl.el 时如何更新 Clojure 依赖项?
【发布时间】:2013-01-24 15:10:00
【问题描述】:

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

【问题讨论】:

    标签: emacs clojure


    【解决方案1】:

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

    M-x cider-restart
    

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


    另一种(非常方便)的方式是使用 clj-refactor。 添加工件C-c m a pcljr-add-project-dependency) 会提示输入你想要的版本,自动把新的 依赖于您的project.clj 文件,然后重新加载您的会话

    【讨论】:

    • 对我来说,运行 cider-restart 不会更新 project.clj 中描述的依赖项。
    • @Micah Elliott,您能否详细说明第二种方式?不确定我是否理解。 cljr-add-project-dependency 非常适合添加新的 deps,但我正在运行的 cider repl 没有重新加载,并且新的依赖项无法访问。虽然我没有使用 clj-refactor .. 不确定它与 cider repl 重启有什么关系。
    • 这些都不适合我。我必须再次cider-quitcider-jack-in。 clj-refactor 使得添加依赖到 project.clj 更加方便。
    【解决方案2】:

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

    以前:

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

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

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

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

    【讨论】:

    • 当重新加载苹果酒过程的麻烦远大于石榴的麻烦时,是否会出现 cemeric/pomegranate 的用处?
    • @ErikAllik 是的。例如,在数据分析上下文中进行修补/探索时 - 可能会在数据清理、规范化等方面建立一堆“状态”。不必为了尝试一个状态而重新运行所有工作以达到该状态不同的模型或可视化库可以很方便。哦,当然,要进行适当的可重复分析,需要重新启动并努力使事情也可以干净地重新运行。
    【解决方案3】:

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

    https://github.com/bmillare/dj

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2017-12-05
      • 2017-05-27
      • 1970-01-01
      • 2014-09-26
      • 2012-07-07
      • 1970-01-01
      相关资源
      最近更新 更多