2014-07-13 16 views
6

TLDR;lein repl rozpoczyna się w niewłaściwym obszarze nazw

lein repl rozpoczyna się w przestrzeni nazw określonej przez :main w project.clj, zamiast user, zależnie od potrzeb.

Szczegóły

Mam Leiningen projekt, który jest wdrożony jako aplikacja wiersza poleceń w uberjar, więc mogę go uruchomić tak:

java -jar my-app-1.0-standalone.jar --some --args 

Mam też dev/user.clj do daj mi ładne środowisko REPL, jako described here.

My project.clj wygląda następująco:

(defproject my-app "1.0" 
    :main my-app.cli 
    :aot [my-app.cli] 

    :profiles {:dev {:source-paths ["src" "dev"]}}) 

Kiedy zacznę rEPL, albo z lein repl z linii poleceń lub M-x cider-jack-in z Emacs, jestem w przestrzeni nazw my-app.cli, zamiast user.

Jeśli usunąć :main my-app.cli z project.clj, mój REPL rozpoczyna się w user nazw jak będę oczekiwać, ale wyraźnie to łamie mi uberjar.

Wszelkie pomysły?

Odpowiedz

4

Kiedy Lein biegnie zadaniowych repl, będzie patrzeć NS, aby przełączyć się w tej kolejności preferencji:

  1. ns określonych w: init-NS rodzaje: rEPL-opcjami określonymi
  2. ns : główne
  3. ns użytkowników

w Twoim przypadku, spróbuj dodać:

:repl-options {:init-ns user} 

do twojego projektu.clj

+0

Działa doskonale! Dziękuję Ci. –

+0

Czy to nadal działa? Właśnie wypróbowałem to w Leiningen 2.7.1 pod Clojure 1.9.0-beta2 i dostaję ten błąd: 'Nie mogłem zlokalizować user__init.class lub user.clj na ścieżce clas. Zaczyna się w przestrzeni nazw 'user', ale przed jej przejściem jest duży ślad stosu. –