2

cider.nrepl実行中のインスタンスに接続したり、検査したり、修正したりできるように、自分の clojure アプリケーションに埋め込もうとしています。

私はcider-nreplleiningen プロファイル ファイルに含めています:

: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))

プログラムは正常にコンパイルおよび実行されます。しかし、ポート 7888 で REPL セッションに接続しようとすると、次のスタック トレースが表示されます。

エラー: 未処理の REPL ハンドラー例外処理メッセージ {:id 0da185f2-38e8-4a83-9941-327b9806176b、:op clone} java.lang.NoClassDefFoundError: clojure/tools/nrepl/StdOutBuffer at clojure.tools.nrepl.middleware.session$session_out .invoke(session.clj:26) at clojure.tools.nrepl.middleware.session$create_session.invoke(session.clj:118) at clojure.tools.nrepl.middleware.session$create_session.invoke(session.clj:114) )

この時点で続行する方法がわからない。グーグル 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 のプロファイル ファイルを介して含まれています。

4

1 に答える 1

4

問題は、cider/cider-repl への依存関係がプロファイルのプラグイン依存関係であることだと思います。プロジェクトがそのライブラリに依存している場合は、project.clj 依存関係にある必要があります。

lein プロファイルは、開発中に使用したいが本番環境では使用したくないライブラリ用であるため、war/jar/uberjar アーティファクトの一部として含まれていません。

于 2014-08-05T23:26:10.770 に答える