简体   繁体   中英

What is equivalent of leiningen :repl-options {:init-ns 'user} for tools.deps in Clojure?

I'm using Cursive and I set aliases to dev , when I run the REPL it does not load the namespace that defined in deps configuration file:

 :aliases {:dev {:main-opts ["--init" "src/my/server/core.clj"
                             "--eval" "(my.server.core/-main)"]}}

I tried this at the command-line and it worked as expected, loading my.server.core and then running its -main function, so I suspect that Cursive is using -R on aliases rather than -A so it is only pulling in :extra-deps and not :main-opts (that's just a guess, I don't use Cursive). My best suggestion is to ask in the #cursive channel on the Clojurians Slack as that is the primary channel for Cursive support (as far as I know).

I'll also highlight Krisztian's comment that you could use "-m" "my.server.core" as your entire :main-opts since -m will load the namespace and run the -main within it.

However, those options are not the same as Leiningen's :init-ns -- what I think you need is:

{:aliases {:dev {:main-opts ["-e" "(require,'my.server.core)"
                             "-e" "(in-ns,'my.server.core)"]}}}

When you specify :main-opts , that will suppress starting a REPL:

$ clj -A:dev
#object[clojure.lang.Namespace 0x3dddbe65 "my.server.core"]
$

So you need to add -r to tell the Clojure CLI that you also want a REPL started:

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=> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM