Search code examples
clojure

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

Solution

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