Как вставить 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.

Другие вопросы по тегам