Как вставить REPL в мое приложение Clojure?
Я пытаюсь встроить cider.nrepl
в моем приложении clojure, чтобы я мог подключиться к своему работающему экземпляру, проверить, исправить и т. д.
Я в том числе cider-nrepl
в моем профиле leiningen:
:plugins [[cider/cider-nrepl "0.7.0"]]
А потом по моему core.clj
:
(:require (cheshire [core :as c])
[byte-streams :as bs]
[clojail [core :as jail] [testers :as testers]]
[clojure.tools.nrepl [server :as nrepl-server]]
[cider.nrepl :refer (cider-nrepl-handler)])
(defn -main [& args]
(println "Starting up REPL")
(nrepl-server/start-server :bind "0.0.0.0" :port 7888 :handler cider-nrepl-handler))
Программа компилируется и работает нормально. Но когда я пытаюсь подключиться к сеансу REPL через порт 7888, я получаю следующую трассировку стека:
ОШИБКА: необработанное сообщение обработки исключительной ситуации обработчика REPL {:id 0da185f2-38e8-4a83-9941-327b9806176b,:op clone} java.lang.NoClassDefFoundError: clojure/tools/nrepl/StdOutBuffer в clojure.tools.nrepl..invoke(session.clj:26) в clojure.tools.nrepl.middleware.session$create_session.invoke(session.clj:118) в clojure.tools.nrepl.middleware.session$create_session.invoke(session.clj:114)
Не уверен, как действовать в этой точке. Поиск в Google StdOutBuffer тоже не помог.
Обновление Это мое полное project.clj
(defproject ruler "1.0"
:description "Autopal Rule Server"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.5.1"]
[clojail "1.0.6"]
[com.rmoquin.bundle/jeromq "0.2.0"]
[cheshire "5.2.0"]
[byte-streams "0.1.10"]
[clj-time "0.7.0"]]
:aot [ruler.core]
:main ruler.core)
Как указано выше, cider-nrepl включен через файл профилей leiningen.
1 ответ
Я думаю, проблема в том, что зависимость от cider/ cider-repl является зависимостью плагина в вашем профиле. Если ваш проект зависит от этой библиотеки, он должен быть в ваших зависимостях project.clj.
Профили lein предназначены для библиотек, которые вы хотите использовать во время разработки, но не в производстве, поэтому они не включены в артефакт war/ jar/ uberjar.