cider-jack-in
funktioniert innerhalb oder außerhalb von Boot-Projekten. Das heißt, in einem Verzeichnis mit build.boot
oder außerhalb eines solchen Verzeichnisses, aber mit cider-default-repl-command
auf "boot"
.
Unter Linux funktioniert dies mit neueren Versionen von Cider. Unter Windows schlägt dies mit der folgenden Ablaufverfolgung fehl.
Are you sure you want to run `cider-jack-in' without a Clojure project? (y or n) y
[nREPL] Starting server via "c:/Users/jmacdonald/local/boot/boot.exe" -i "(require 'cider.tasks)" -d "org.clojure/tools.nrepl:0.2.13" -d "cider/cider-nrepl:0.18.0" cider.tasks/add-middleware -m "cider.nrepl/cider-middleware" cider.tasks/nrepl-server -b :: wait...
error in process sentinel: nrepl-server-sentinel: Could not start nREPL server: Classpath conflict: org.clojure/clojure version 1.10.0-alpha7 already loaded, NOT loading version 1.2.0
java.lang.Thread.run
java.util.concurrent.ThreadPoolExecutor$Worker.run
java.util.concurrent.ThreadPoolExecutor.runWorker
java.util.concurrent.FutureTask.run
...
clojure.core/binding-conveyor-fn/fn core.clj: 2022
boot.core/boot/fn core.clj: 1032
boot.core/run-tasks core.clj: 1022
cider.tasks/eval224/fn/fn/fn tasks.clj: 33
...
cider-nrepl.main/start-nrepl main.clj: 54
cider-nrepl.main/build-handler main.clj: 33
cider-nrepl.main/->mw-list main.clj: 29
clojure.core/into core.clj: 6844
clojure.core/transduce core.clj: 6829
clojure.core.protocols/fn/G protocols.clj: 13
clojure.core.protocols/fn protocols.clj: 75
clojure.core.protocols/seq-reduce protocols.clj: 31
clojure.core.protocols/fn/G protocols.clj: 19
clojure.core.protocols/fn protocols.clj: 136
...
clojure.core/map/fn/fn core.clj: 2734
clojure.core/symbol core.clj: 579
java.lang.ClassCastException: boot.repl$disable_exception_colors cannot be cast to java.lang.String
clojure.lang.ExceptionInfo: boot.repl$disable_exception_colors cannot be cast to java.lang.String
line: 5
error in process sentinel: Could not start nREPL server: Classpath conflict: org.clojure/clojure version 1.10.0-alpha7 already loaded, NOT loading version 1.2.0
java.lang.Thread.run
java.util.concurrent.ThreadPoolExecutor$Worker.run
java.util.concurrent.ThreadPoolExecutor.runWorker
java.util.concurrent.FutureTask.run
...
clojure.core/binding-conveyor-fn/fn core.clj: 2022
boot.core/boot/fn core.clj: 1032
boot.core/run-tasks core.clj: 1022
cider.tasks/eval224/fn/fn/fn tasks.clj: 33
...
cider-nrepl.main/start-nrepl main.clj: 54
cider-nrepl.main/build-handler main.clj: 33
cider-nrepl.main/->mw-list main.clj: 29
clojure.core/into core.clj: 6844
clojure.core/transduce core.clj: 6829
clojure.core.protocols/fn/G protocols.clj: 13
clojure.core.protocols/fn protocols.clj: 75
clojure.core.protocols/seq-reduce protocols.clj: 31
clojure.core.protocols/fn/G protocols.clj: 19
clojure.core.protocols/fn protocols.clj: 136
...
clojure.core/map/fn/fn core.clj: 2734
clojure.core/symbol core.clj: 579
java.lang.ClassCastException: boot.repl$disable_exception_colors cannot be cast to java.lang.String
clojure.lang.ExceptionInfo: boot.repl$disable_exception_colors cannot be cast to java.lang.String
line: 5
(setf cider-default-repl-command "boot")
M-x cider-jack-in
REPL wird nicht gestartet, aber ich verwende eine Version mit dem Tag 20180903.1611
. Dies entspricht einem Commit von 8996e699ae7dd140a9f74219940e2e30ff213fd9
~/.boot/boot.properties
wie unten. (Die gleichen Fehler treten bei anderen Versionen von Boot und Clojure auf.)
#http://boot-clj.com
#Thu Sep 06 09:04:38 CDT 2018
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_VERSION=2.8.1
BOOT_CLOJURE_VERSION=1.10.0-alpha7
GNU Emacs 26.1 (build 1, x86_64-w64-mingw32) of 2018-05-29
Aus dem emax64-Projekt.
Windows 7.
Gibt es eine Möglichkeit für Sie zu erkennen, woher diese Abhängigkeit von Clojure 1.2 stammt? Könnte von der Standardeinspritzung von nREPl 0.2.13 stammen, die ich wahrscheinlich jetzt entfernen sollte, da nREPL 0.4 hier ist.
Die 1.2-Abhängigkeit stammt von nREPL. Zumindest verschwinden diese Fehler, wenn die Abhängigkeit vom Boot-Aufruf entfernt wird ( boot -i "(require 'cider.tasks)" -d cider/cider-nrepl\:0.18.0 cider.tasks/add-middleware -m cider.nrepl/cider-middleware cider.tasks/nrepl-server -b :: wait
). Beachten Sie, dass die Boot-REPL-Task eine eigene Abhängigkeit von nREPL enthält, Clojure jedoch ausschließt.
Fehler bleiben jedoch bestehen. Ich glaube, der Klassenwegkonflikt ist ein roter Hering. Nach einer kleinen Untersuchung kann ich den Fehler außerhalb von Windows mit boot -C -i "(require 'cider.tasks)" -d cider/cider-nrepl\:0.18.0 cider.tasks/add-middleware -m cider.nrepl/cider-middleware cider.tasks/nrepl-server -b :: wait
duplizieren. Dies beseitigt den Klassenpfadkonflikt, deaktiviert aber auch die farbige Ausgabe explizit mit -C
.
->mw-list
scheint zu versuchen, disable-exception-colors
in einen String umzuwandeln, aber für mein Leben kann ich nicht herausfinden, warum.
Was ist disable-exception-colors
?
@arichiardi Gibt es hier einen Einblick als jemand, der mit Boot vertraut ist?
Es ist die Middleware, die die hier definierte Kolorierung deaktiviert. Es kann unter Linux mit dem Flag -C
ausgelöst werden. Das ist so viel wie ich weiß, wird andere näher darauf eingehen lassen.
Aha. Könnte dann etwas falsch sein in der nrepl-server
Aufgabe in cider-nrepl
. @arichiardi wird definitiv mehr wissen. Ich vermute, Sie werden dieses Problem nicht haben, wenn Sie auf Boot 2.8.2 aktualisieren und einfach cider-jack-in
zurück ändern, um die Aufgabe server
(als 2.8.2-Bundles nREPL 0.4 direkt) .
Ähm, ich habe keine Ahnung, der Boot hat definitiv funktioniert. Ich werde heutzutage versuchen, mehr zu graben, danke für das Debuggen des Problems!
Auf welche server
Aufgabe beziehen Sie sich? Installiert 2.8.2, aber der Befehl von oben (mit -C
) schlägt für mich immer noch fehl. Es ist eine kleine Unannehmlichkeit, da die REPL immer noch startet und ich mich mit ihr verbinden kann.
Siehe cider-boot-parameters
und ändern Sie den Wert in "server -b :: wait". Ihr Stacktrace impliziert, dass der Fehler in der Startaufgabe von nrepl-server liegt. Ich gehe also davon aus, dass die Dinge für Sie funktionieren, wenn Sie ihn umgehen.
Ich bekomme keine solche Aufgabe mit diesen Parametern.
Ops, mein schlechtes. Es ist repl -b :: wait
.
Ja, das funktioniert. Auch am 2.8.1.
Stimmt, aber dann werden Sie am Ende die alte nREPL verwenden, die ich an dieser Stelle nicht empfehlen würde. Wie auch immer, wir haben bestätigt, dass die benutzerdefinierte Aufgabe nrepl-server
einen Fehler enthält. Hoffentlich wird @arichiardi das schnell
Eh, der einzige Hinweis, den ich geben kann, ohne mehr zu untersuchen, ist, dass diese bestimmte Middleware ^:private
.
Meine Spinnensinne sagen mir, dass ich der Grund bin. Hoffentlich habe ich bald Zeit für einen weiteren Blick.
Als Problemumgehung können Sie hinzufügen
BOOT_COLOR=1
zu Ihrer ~/.boot/boot.properties
Datei
cider-jack-in
funktioniert danach für mich
Ich glaube, ich habe das herausgefunden:
BOOT_COLOR
env-Variable auf etwas anderes als 1
, true
oder yes
(siehe https: // github .com / boot-clj / boot / blob / master / boot / pod / src / boot / util.clj # L45) Dann fügt boot die Middleware boot.repl/disable-exception-colors
zu boot.repl/*default-middleware*
. Es fügt die Funktion selbst hinzu - kein Symbol, Var, String oder etwas anderes, das die Middleware darstelltcider.tasks/nrepl-server
übergibt den Wert von boot.repl/*default-middleware*
an cider.nrepl/start-nrepl
cider.nrepl/start-nrepl
erwartet jedoch Variablen oder Zeichenfolgen, keine FunktionenDieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihren Beitrag und Ihr Verständnis!
@fllyingmachine Tolle Analyse!
Ich bin mir nicht sicher, wo genau wir das beheben sollen, aber denken Sie daran, dass wir nicht mehr cider.nrepl/start-nrepl
(dies war ein Push für nREPL selbst). Die alten ns in cider-nrepl
sollten entfernt werden.
Nun bleibt die Frage, wo genau dies behoben werden soll - auf der Boot-Seite oder auf der nREPL-Seite? Ich habe nicht wirklich eine starke Präferenz, aber dies am Ende von Boot zu ändern, scheint mir vernünftiger.
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihren Beitrag und Ihr Verständnis!
Dieses Problem wurde aufgrund mangelnder Aktivität automatisch geschlossen. Fühlen Sie sich frei, es wieder zu öffnen, wenn Sie jemals darauf zurückkommen.
Hilfreichster Kommentar
Als Problemumgehung können Sie hinzufügen
BOOT_COLOR=1
zu Ihrer~/.boot/boot.properties
Dateicider-jack-in
funktioniert danach für mich