我使用的是Cursive,我把别名设置为 dev
当我运行REPL时,它没有加载在deps配置文件中定义的命名空间。
:aliases {:dev {:main-opts ["--init" "src/my/server/core.clj"
"--eval" "(my.server.core/-main)"]}}
我在命令行中试了一下,结果和预期的一样,加载了 my.server.core
然后运行其 -main
函数,所以我怀疑草书是在使用 -R
在别名上而非 -A
所以它只拉来 :extra-deps
而不是 :main-opts
这只是猜测,我不用草书)。我最好的建议是在 #cursive
频道,因为那是支持草书的主要频道(据我所知)。
我还要强调一下 Krisztian 的评论,你可以使用 "-m" "my.server.core"
作为你的全部 :main-opts
自从 -m
将加载命名空间并运行 -main
内。
然而,这些选项是 不 和莱宁根一样 :init-ns
-- 我想你需要的是:
{:aliases {:dev {:main-opts ["-e" "(require,'my.server.core)"
"-e" "(in-ns,'my.server.core)"]}}}
当你指定 :main-opts
,这将抑制启动REPL。
$ clj -A:dev
#object[clojure.lang.Namespace 0x3dddbe65 "my.server.core"]
$
所以你需要添加 -r
告诉 Clojure CLI 你也想启动 REPL。
clj -A:dev -r
#object[clojure.lang.Namespace 0x433ffad1 "my.server.core"]
my.server.core=> (doc -main)
-------------------------
my.server.core/-main
([& args])
I don't do a whole lot ... yet.
nil
my.server.core=>