如何在项目之外运行lein repl?

时间:2015-11-19 16:22:24

标签: clojure leiningen nrepl

昨晚我花了一些时间搞乱我的leinigen profiles.clj,以摆脱在我的项目中启动苹果酒时所打印的所有错误。今天我开始从终端开始一个代表(我喜欢在工作时保持一个开放),但它没有工作。我认为这是一个苹果酒问题,所以我从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)有关。

3 个答案:

答案 0 :(得分:0)

使用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。

答案 1 :(得分:0)

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

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

进行复制

答案 2 :(得分:0)

你的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}}}