Clojure lein repl在错误的命名空间中启动

Clojure lein repl在错误的命名空间中启动,clojure,leiningen,Clojure,Leiningen,TLDR lein repl根据需要在project.clj中的:main定义的命名空间中启动,而不是在user中启动 详细信息 我有一个项目作为命令行应用程序部署在uberjar中,因此我可以像这样运行它: java -jar my-app-1.0-standalone.jar --some --args 我还有一个dev/user.clj可以为我提供一个很好的REPL环境 我的project.clj如下所示: (defproject我的应用程序“1.0” :main my-app.cli

TLDR

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

详细信息

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

java -jar my-app-1.0-standalone.jar --some --args
我还有一个
dev/user.clj
可以为我提供一个很好的REPL环境

我的
project.clj
如下所示:

(defproject我的应用程序“1.0”
:main my-app.cli
:aot[my app.cli]
:profiles{:dev{:sourcepath[“src”“dev”]})
当我从命令行使用
lein REPL
或从Emacs使用
M-x苹果酒插孔启动REPL时,我处于
my app.cli
命名空间中,而不是
user

如果我从
project.clj
中删除
:main my app.cli
,我的REPL将在
user
名称空间中启动,正如我所期望的那样,但这显然会破坏我的uberjar


有什么想法吗?

当lein repl任务运行时,它将按照以下优先顺序查找要切换到的ns:

  • 在:repl选项的:init ns中指定的ns
  • 指定的ns:主
  • 用户ns
  • 在您的情况下,请尝试添加:

    :repl-options {:init-ns user}
    

    为您的项目干杯。clj

    工作完美!谢谢。这个还能用吗?我刚刚在Clojure 1.9.0-beta2下的Leiningen 2.7.1中尝试了它,我得到了一个错误:
    在类路径上找不到user_uinit.class或user.clj。它确实从
    user
    名称空间开始,但在它到达之前有一个大堆栈跟踪。@Ben Kovitz:尝试创建
    src/user.clj
    。我可以在没有它的情况下再现您的错误,并且当我创建
    user.clj
    时,我不会得到任何错误。