2016-10-14 20 views
0

MavenでセットアップされているプロジェクトでCIDERのデバッガを使用しようとしています(Leiningenに切り替えることはできません)。MavenプロジェクトでNreplミドルウェアが正しく読み込まれない

<plugin> 
    <groupId>com.theoryinpractise</groupId> 
    <artifactId>clojure-maven-plugin</artifactId> 
    <version>1.8.1</version> 
    <extensions>true</extensions> 
    <executions> 
    <execution> 
     <id>clojure-compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>compile</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>clojure-test</id> 
     <phase>test</phase> 
     <goals> 
     <goal>test</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <nreplMiddlewares> 
     <middleware>cider.nrepl.middleware.apropos/wrap-apropos</middleware> 
     <middleware>cider.nrepl.middleware.classpath/wrap-classpath</middleware> 
     <middleware>cider.nrepl.middleware.complete/wrap-complete</middleware> 
     <middleware>cider.nrepl.middleware.debug/wrap-debug</middleware> 
     <middleware>cider.nrepl.middleware.format/wrap-format</middleware> 
     <middleware>cider.nrepl.middleware.info/wrap-info</middleware> 
     <middleware>cider.nrepl.middleware.inspect/wrap-inspect</middleware> 
     <middleware>cider.nrepl.middleware.macroexpand/wrap-macroexpand</middleware> 
     <middleware>cider.nrepl.middleware.ns/wrap-ns</middleware> 
     <middleware>cider.nrepl.middleware.pprint/wrap-pprint</middleware> 
     <middleware>cider.nrepl.middleware.pprint/wrap-pprint-fn</middleware> 
     <middleware>cider.nrepl.middleware.refresh/wrap-refresh</middleware> 
     <middleware>cider.nrepl.middleware.resource/wrap-resource</middleware> 
     <middleware>cider.nrepl.middleware.stacktrace/wrap-stacktrace</middleware> 
     <middleware>cider.nrepl.middleware.test/wrap-test</middleware> 
     <middleware>cider.nrepl.middleware.trace/wrap-trace</middleware> 
     <middleware>cider.nrepl.middleware.out/wrap-out</middleware> 
     <middleware>cider.nrepl.middleware.undef/wrap-undef</middleware> 
     <middleware>cider.nrepl.middleware.version/wrap-version</middleware> 
    </nreplMiddlewares> 
    <sourceDirectories> 
     <sourceDirectory>src/main/clojure</sourceDirectory> 
    </sourceDirectories> 
    <namespaces> 
     <namespace>!edu.upc.modelvsdocument.repl.*</namespace> 
     <namespace>edu.upc.modelvsdocument.*</namespace> 
    </namespaces> 
    <!--<warnOnReflection>true</warnOnReflection>--> 
    </configuration> 
</plugin> 

をと依存関係を追加しました:私は、彼らのgithubののREADMEに記載されているようにClojureの-のmaven-プラグインを構成した私のサイダーのバージョンが正確0.14.0-SNAPSHOTです

<dependencies> 
    <dependency> 
    <groupId>org.clojure</groupId> 
    <artifactId>tools.nrepl</artifactId> 
    <version>0.2.12</version> 
    </dependency> 
    <dependency> 
    <groupId>cider</groupId> 
    <artifactId>cider-nrepl</artifactId> 
    <version>0.14.0-SNAPSHOT</version> 
    </dependency> 
    <!-- ... --> 
</dependencies> 

注意を。この設定では

、私は

$ mvn clojure:nrepl 

そして、これとを使用してnREPLサーバを起動し、私はcider-connectを使用してemacsのから接続できるようにしています。

この設定では、名前空間のロードやREPLの使用など、多くのことができますが、デバッガなどのミドルウェアの機能については、アンバウンド関数やvarsに関するすべての種類のエラーが発生します。

clojure.lang.LispReader$ReaderException: java.lang.IllegalStateException: Attempting to call unbound fn: #'cider.nrepl.middleware.debug/debug-reader 
at clojure.lang.LispReader.read (LispReader.java:294) 
    clojure.lang.LispReader.read (LispReader.java:198) 
    clojure.lang.LispReader.read (LispReader.java:187) 
    clojure.core$read.invokeStatic (core.clj:3747) 
    clojure.core$read.invoke (core.clj:3720) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__681$fn__684.invoke (interruptible_eval.clj:98) 
    clojure.main$repl$read_eval_print__9594$fn__9595.invoke (main.clj:238) 
    clojure.main$repl$read_eval_print__9594.invoke (main.clj:238) 
    clojure.main$repl$fn__9603.invoke (main.clj:258) 
    clojure.main$repl.invokeStatic (main.clj:258) 
    clojure.main$repl.doInvoke (main.clj:174) 
    clojure.lang.RestFn.invoke (RestFn.java:1523) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__681.invoke (interruptible_eval.clj:87) 
    clojure.lang.AFn.applyToHelper (AFn.java:152) 
    clojure.lang.AFn.applyTo (AFn.java:144) 
    clojure.core$apply.invokeStatic (core.clj:657) 
    clojure.core$with_bindings_STAR_.invokeStatic (core.clj:1962) 
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1962) 
    clojure.lang.RestFn.invoke (RestFn.java:425) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invokeStatic (interruptible_eval.clj:85) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:55) 
    clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__726$fn__729.invoke (interruptible_eval.clj:222) 
    clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__721.invoke (interruptible_eval.clj:190) 
    clojure.lang.AFn.run (AFn.java:22) 
    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617) 
    java.lang.Thread.run (Thread.java:745) 
Caused by: java.lang.IllegalStateException: Attempting to call unbound fn: #'cider.nrepl.middleware.debug/debug-reader 
at clojure.lang.Var$Unbound.throwArity (Var.java:43) 
    clojure.lang.AFn.invoke (AFn.java:32) 
    clojure.lang.Var.invoke (Var.java:379) 
    clojure.lang.LispReader$CtorReader.readTagged (LispReader.java:1351) 
    clojure.lang.LispReader$CtorReader.invoke (LispReader.java:1330) 
    clojure.lang.LispReader$DispatchReader.invoke (LispReader.java:786) 
    clojure.lang.LispReader.read (LispReader.java:265) 
    clojure.lang.LispReader.read (LispReader.java:198) 
    clojure.lang.LispReader.read (LispReader.java:187) 
    clojure.core$read.invokeStatic (core.clj:3747) 
    clojure.core$read.invoke (core.clj:3720) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__681$fn__684.invoke (interruptible_eval.clj:98) 
    clojure.main$repl$read_eval_print__9594$fn__9595.invoke (main.clj:238) 
    clojure.main$repl$read_eval_print__9594.invoke (main.clj:238) 
    clojure.main$repl$fn__9603.invoke (main.clj:258) 
    clojure.main$repl.invokeStatic (main.clj:258) 
    clojure.main$repl.doInvoke (main.clj:174) 
    clojure.lang.RestFn.invoke (RestFn.java:1523) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__681.invoke (interruptible_eval.clj:87) 
    clojure.lang.AFn.applyToHelper (AFn.java:152) 
    clojure.lang.AFn.applyTo (AFn.java:144) 
    clojure.core$apply.invokeStatic (core.clj:657) 
    clojure.core$with_bindings_STAR_.invokeStatic (core.clj:1962) 
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1962) 
    clojure.lang.RestFn.invoke (RestFn.java:425) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invokeStatic (interruptible_eval.clj:85) 
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:55) 
    clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__726$fn__729.invoke (interruptible_eval.clj:222) 
    clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__721.invoke (interruptible_eval.clj:190) 
    clojure.lang.AFn.run (AFn.java:22) 
    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617) 
    java.lang.Thread.run (Thread.java:745) 

cider-jack-inとLeiningenをを使用している場合、依存関係が正しくnREPLによって注入し、私はデバッガを使用することができる午前されていること:デバッガの場合。私がcider-connectをlein replに使うと、同じ種類の問題が発生しますが、nREPLミドルウェアをロードするためにleiningenを設定したことはありません。それは、ミドルウェアがmavenの場合でも(指定されていても)初期化されていないと信じさせてくれます。

この設定を行うために私の設定で何が欠けていますか?

答えて

1

私が見つけたClojureの-のmaven-pluginのの問題追跡に自分自身に答える:https://github.com/talios/clojure-maven-plugin/pull/87

それはそれはnreplMiddlewaresの設定を追加することで十分ではないようだ、あなたはまだnreplサーバを起動するときにnreplハンドラを渡す必要があります。私は次のようにします:

$ mvn clojure:nrepl -Dclojure.nrepl.handler=cider.nrepl/cider-nrepl-handler 

これで、サイダーは予想どおりに動作し、私はデバッガを使用することができます。

+0

pom.xmlファイルの最上位の 'properties'要素に' clojure.nrepl.handler'の値を追加することができます。呼び出しのたびに '-D'を使って渡すのではなく、 – semperos

関連する問題