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

Viewed 666

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

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