2014-07-13 24 views
6

TLDR;lein repl从错误的命名空间开始

lein repl开始在由在:mainproject.clj定义的命名空间,而不是user,根据需要。

详细

我有被部署为在uberjar一个命令行应用程序Leiningen项目,这样我就可以像这样运行:

java -jar my-app-1.0-standalone.jar --some --args 

我也有一个dev/user.clj到给我一个很好的REPL环境,如described here

project.clj看起来是这样的:

(defproject my-app "1.0" 
    :main my-app.cli 
    :aot [my-app.cli] 

    :profiles {:dev {:source-paths ["src" "dev"]}}) 

当我开始我的REPL,要么在命令行lein replM-x cider-jack-in从Emacs的,我在my-app.cli命名空间,而不是user

如果我从project.clj删除:main my-app.cli,我的REPL从user命名空间开始,如我所料,但显然这打破了我的uberjar。

任何想法?

回答

4

当雷音REPL任务运行时,将查找NS切换到优先的顺序是:在规定的

  1. NS:指定
  2. NS REPL选项:在初始化纳秒:主要
  3. 用户NS

在你的情况下,尝试添加:

:repl-options {:init-ns user} 

到您的项目.clj

+0

工作完美!谢谢。 –

+0

这是否仍然有效?我只是在Clojure 1.9.0-beta2下的Leiningen 2.7.1中尝试了它,并且出现此错误:'无法在类路径中找到user__init.class或user.clj。它确实从'user'命名空间开始,但在它到达之前有一个大的堆栈跟踪。 –