Я пытаюсь использовать отладчик CIDER в моем проекте, который настроен в maven (не может переключиться на Leiningen). Я настроил Clojure-Maven-плагин, как указано в их GitHub README:Неправильное загрузку NREPL с проектом maven
<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>
И добавил зависимостей:
<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>
Обратите внимание, что мой сидр версия является именно 0.14.0-ПАНОРАМА.
С помощью этой конфигурации, я запускаю сервер nREPL с помощью
$ mvn clojure:nrepl
И с этим, я могу подключиться из Emacs с помощью cider-connect
.
С помощью этой настройки я могу делать много вещей, таких как загрузка пространств имен и использование 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)
Обратите внимание, что при использовании Leiningen с cider-jack-in
зависимостей правильно впрыскиваемого nREPL, и я могу использовать отладчик. Если я использую cider-connect
для замены лейна, у меня возникают те же проблемы, но я никогда не настраивал leiningen для загрузки nREPL middlewares. Это заставляет меня думать, что средние линии не инициализируются в случае maven (хотя и указаны).
Что мне не хватает в моей конфигурации, чтобы сделать эту работу?
Вы можете добавить значение для 'clojure.nrepl.handler' в элементе' properties' верхнего уровня вашего файла pom.xml, а не передавать его через '-D' при каждом вызове. – semperos