【问题标题】:How can I run lein repl outside of a project?如何在项目之外运行 lein repl?
【发布时间】:2016-02-21 21:49:49
【问题描述】:

昨晚我花了一些时间弄乱我的 leinigen profiles.clj 以消除在我的项目中启动苹果酒时打印的所有错误。今天我从终端开始了一个repl(我喜欢在工作时保持一个打开)但它没有用。我认为这是苹果酒的问题,所以我从 Emacs 尝试了它,但即使在 Emacs 中,如果我不在项目中,repl 也不会启动。

这是错误:

Error loading refactor-nrepl.middleware: clojure.lang.ArityException: Wrong number of args (4) passed to: StringReader, compiling:(abnf.clj:186:28)
Exception in thread "Thread-4" java.lang.RuntimeException: Unable to resolve var: refactor-nrepl.middleware/wrap-refactor in this context, compiling:(NO_SOURCE_PATH:0:0)
...
Caused by: java.lang.RuntimeException: Unable to resolve var: refactor-nrepl.middleware/wrap-refactor in this context

我的~/.lein/profiles.clj

{:user {:plugins [[lein-try "0.4.3"]
                  [refactor-nrepl "1.1.0"]
                  [cider/cider-nrepl "0.9.1"]]
        :dependencies [[org.clojure/tools.nrepl "0.2.12"]
                       [acyclic/squiggly-clojure "0.1.4"]
                       ^:replace [org.clojure/tools.nrepl "0.2.12"]
                       [refactor-nrepl "1.1.0"]]}}

苹果酒在项目中启动时的版本

; CIDER 0.9.1 (Java 1.8.0_45, Clojure 1.7.0, nREPL 0.2.12)

我对 Clojure、Leinigen、Emacs 等还是很陌生,所以我不确定为什么上面所做的一切都让我的苹果酒错误消失了,但确实如此。我遇到的苹果酒错误与 nrepl 版本太低以及没有安装某些东西(如 refactor-nrepl)有关。

【问题讨论】:

    标签: clojure leiningen nrepl


    【解决方案1】:

    当使用lein repl 从 lein 启动 repl 时,它真的想在 lein 项目目录中运行。为此,我在我的主目录中保留了一个名为 clj 的空 lein 项目。这样一来,project.clj 文件中已经存在我的常见依赖项,并且 lein 已按照我喜欢的方式进行了预配置。

    您可以在空目录中启动lein repl,但每次启动前您都会收到 10-20 条错误消息。

    另一种方法是使用 clojure jar 文件中内置的普通 repl:

    ~/dummy > cp /home/alan/.m2/repository/org/clojure/clojure/1.8.0-RC1/clojure-1.8.0-RC1.jar .   
    ~/dummy > d *
    -rw-rw-r-- 1 alan alan 3935726 Nov 19 14:11 clojure-1.8.0-RC1.jar
    ~/dummy > java -jar clojure-1.8.0-RC1.jar 
    Clojure 1.8.0-RC1
    user=> 
    

    如您所见,我创建了一个名为dummy 的空目录并复制到clojure-*.jar 文件中。然后,您可以使用语法 java -jar xxx.jar 运行它,它将完全独立于 lein 启动一个 repl。

    【讨论】:

    • 我知道我可以做一个空项目,这就是我最终可能会做的事情。以前我可以在任何地方启动,现在我不能。
    【解决方案2】:

    我还保留了一个 scratch 项目,用于快速/简单的 repl 会话。有一个lien-oneoff 插件,它可以让简单的单文件lein 项目的工作变得容易,这可能很有用。

    你可以做的另一件事是设置一个启动配置,基本上让一个 repl 可以使用

    【讨论】:

      【解决方案3】:

      你的lein版本是什么,我用2.5.3,我可以在任何地方开始lein repl

      Shell:~ >: lein repl
      nREPL server started on port 52343 on host 127.0.0.1 - nrepl://127.0.0.1:52343
      REPL-y 0.3.7, nREPL 0.2.10
      Clojure 1.7.0
      Java HotSpot(TM) 64-Bit Server VM 1.8.0_60-b27
          Docs: (doc function-name-here)
                (find-doc "part-of-name-here")
        Source: (source function-name-here)
       Javadoc: (javadoc java-object-or-class-here)
          Exit: Control+D or (exit) or (quit)
       Results: Stored in vars *1, *2, *3, an exception in *e
      
      user=> Bye for now!
      Shell:~ >: lein version
      Leiningen 2.5.3 on Java 1.8.0_60 Java HotSpot(TM) 64-Bit Server VM
      
      Shell:~ >: cat .lein/profiles.clj 
      {:1.2 {:dependencies [[org.clojure/clojure "1.2.0"]]}
       :1.3 {:dependencies [[org.clojure/clojure "1.3.0"]]}
       :1.4 {:dependencies [[org.clojure/clojure "1.4.0"]]}
      
       :user {:plugins [[lein-immutant "2.0.0-alpha2"]
                        [lein-clojars "0.9.1"]
                        [lein-ancient "0.5.5"]
                        [lein-kibit "0.0.8"]
                        [lein-try "0.4.3"]
                        [venantius/ultra "0.2.0"]]
              :ultra {:color-scheme :solarized_dark}}}
      

      【讨论】:

      • lein repl(在项目中)nREPL server started on port 55164 on host 127.0.0.1 - nrepl://127.0.0.1:55164 REPL-y 0.3.5, nREPL 0.2.12 Clojure 1.7.0 lein -v Leiningen 2.5.1 on Java 1.8.0_45 Java HotSpot(TM) 64-Bit Server VM
      猜你喜欢
      • 2014-11-28
      • 2016-08-14
      • 1970-01-01
      • 2018-07-07
      • 2016-11-09
      • 2019-10-19
      • 1970-01-01
      • 2016-03-25
      • 2014-12-11
      相关资源
      最近更新 更多