Ответ 1
java -cp .;clojure-1.3.0.jar; clojure.main -e \
"(ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)"
Запись (in-ns 'dbx)
в файл и загрузка не изменяет пространство имен по умолчанию для repl (используя cygwin/console). Пространство имен все еще user=>
, а не dbx=>
.
vikrant[28] clj
Clojure 1.3.0
user=> (load-file "try1.clj")
#(Namespace dbx)
user=>
Как мы можем запустить REPL в пространстве имен, определенных в файле script?
java -cp .;clojure-1.3.0.jar; clojure.main -e \
"(ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)"
В настоящее время :repl-options {:init-ns foo.bar}
.
См. https://github.com/technomancy/leiningen/blob/master/sample.project.clj
Если вы используете Leiningen для создания своего проекта, добавьте его в файл project project.clj
:
(defproject test "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]]
:main test.core)
В вашем файле src/test/core.clj
добавьте это, чтобы создать пространство имен test.core
:
(ns test.core)
(defn -main [& args])
Затем создайте свой проект с помощью Leiningen с помощью lein compile
. Затем введите lein repl
чтобы вызвать REPL в вашем пространстве имен. Приглашение REPL будет выглядеть так:
test.core=>
В дополнение к ответу Карлоса, предлагающему :repl-options {:init-ns foo.bar}
, у меня также был успех с добавлением :dev {:main user}
к моему профилю .clj.
Чтобы указать больше контекста:
;; /foo/profile.clj
...
:main foo.core
:dev {:main user
:source-paths ["dev"]}`
...
;; /foo/dev/user.clj
(ns user
(:require
[clojure.pprint :refer (pprint)]
[clojure.repl :refer :all]
[clojure.string :as str]
[clojure.test :refer [run-tests run-all-tests]]
[clojure.tools.namespace.repl :refer [refresh refresh-all]]))
(ns dbx)
(clojure.main/repl)
(in-ns 'dbx)
(clojure.core/use 'clojure.core)
В последних версиях Clojure есть гораздо лучший способ сделать это:
java -cp myapp.jar clojure.main -m myapp.core
Одним из способов использования tools.deps было бы определить псевдоним и выполнить в нем несколько форм:
:aliases
{:cursive {:main-opts ["-e" "(load \"de/sveri/getless/user\")"
"-e" "(de.sveri.getless.user/reset)"]}
Это загрузит пространство имен de.sveri.getless.user
и впоследствии выполнит функцию de.sveri.getless.user.reset
.