【问题标题】:'cider-jack-in' run clojure instead leiningen without a clojure project'cider-jack-in' 在没有 clojure 项目的情况下运行 clojure 而不是 leiningen
【发布时间】:2019-03-02 07:09:08
【问题描述】:

我试图在没有我只想运行 Clojure REPL 的 Clojure 项目的情况下从 emacs 执行“cider-jack-in”。但我发现苹果酒正在尝试运行/usr/local/bin/clojure 而不是/usr/local/bin/lein,这并没有将我的profiles.clj 用于Leiningen 设置。当我尝试使用 Clojure 项目时,它通常适用于 lein

我想知道是否有任何原因,即使我在终端中尝试 lein repl 时没有任何问题,但我希望 Cider 会这样做,以及设置通过 Cider 运行 Leiningen 的方法没有 Clojure 项目。

我会感谢任何关于此的 cmets。

【问题讨论】:

    标签: emacs clojure leiningen cider


    【解决方案1】:

    试试:(setq cider-jack-in-default 'lein)

    【讨论】:

    • 谢谢@dpassen。我尝试了您的建议,还尝试了另一个建议,例如:(setq cider-default-repl-command "lein") 但任何情况下的问题是,当我尝试评估其上的任何代码或打印长错误消息后正常工作时,REPL 卡住了。不幸的是,到目前为止,我找不到重现每个问题的条件,但不知何故,我从你那里得到了巨大的暗示。
    • 错误是:java.lang.IllegalArgumentException: No method in multimethod 'op-handler' for dispatch value: null ... cider.nrepl.middleware.util.error_handling$eval2592$fn__2593.invoke (error_handling.clj:162) ...
    • 不幸的是,这远远超出了我的知识范围。如果这里没有人知道,我建议针对cider 提出问题。
    【解决方案2】:

    在 CIDER 0.18(当前稳定版本)上,您需要将 cider-jack-in-default 设置为符号,而不是字符串(例如 'lein)。

    (define-obsolete-variable-alias 'cider-default-repl-command 'cider-jack-in-default)
    (defcustom cider-jack-in-default (if (executable-find "clojure") 'clojure-cli 'lein)
      "The default tool to use when doing `cider-jack-in' outside a project.
    This value will only be consulted when no identifying file types, i.e.
    project.clj for leiningen or build.boot for boot, could be found.
    
    As the Clojure CLI is bundled with Clojure itself, it's the default.
    In the absence of the Clojure CLI (e.g. on Windows), we fallback
    to Leiningen."
      :type '(choice (const 'lein)
                     (const 'boot)
                     (const 'clojure-cli)
                     (const 'shadow-cljs)
                     (const 'gradle))
      :group 'cider
      :safe #'symbolp
      :package-version '(cider . "0.9.0"))
    

    旧变量确实接受了一个字符串,这是真的。如果没有看到完整的堆栈跟踪,我无法确定您到底出了什么问题。一般来说,最好在 CIDER 的问题跟踪器上提出此类问题。

    如果有人想知道为什么现在 CIDER 使用 clojure-cli 而不是 lein 来表示无项目 REPL - 我们的想法是 Clojure CLI 是我们可以假设每个 Clojure 用户都会拥有的唯一工具,因此它为更安全的默认值。

    【讨论】:

    猜你喜欢
    • 2014-05-19
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多