lein repl以错误的命名空间开始

时间:2014-07-13 07:11:55

标签: clojure leiningen

TLDR;

lein repl根据需要在:main中的project.clj定义的名称空间中开始,而不是user

详情

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

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"]}})

当我从命令行使用lein repl或从Emacs使用M-x cider-jack-in启动REPL时,我位于my-app.cli命名空间,而不是user

如果我从:main my-app.cli删除project.clj,我的REPL就会在user命名空间中启动,但是这显然会打破我的超级明星。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

当lein repl任务运行时,它会查找ns以按此优先顺序切换到:

  1. ns在:repl-options
  2. 的:init-ns中指定
  3. ns指定:main
  4. 用户ns
  5. 在您的情况下,请尝试添加:

    :repl-options {:init-ns user}
    

    到你的project.clj