Cider: Boot REPLs unter Windows können nicht eingebunden werden.

Erstellt am 7. Sept. 2018  ·  21Kommentare  ·  Quelle: clojure-emacs/cider

Erwartetes Verhalten

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" .

Tatsächliches Verhalten

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

Schritte zum Reproduzieren des Problems

(setf cider-default-repl-command "boot")
M-x cider-jack-in

Informationen zu Umgebung und Version

Informationen zur CIDER-Version

REPL wird nicht gestartet, aber ich verwende eine Version mit dem Tag 20180903.1611 . Dies entspricht einem Commit von 8996e699ae7dd140a9f74219940e2e30ff213fd9

Lein / Boot-Version

~/.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

Emacs Version

GNU Emacs 26.1 (build 1, x86_64-w64-mingw32) of 2018-05-29

Aus dem emax64-Projekt.

Betriebssystem

Windows 7.

bug stale

Hilfreichster Kommentar

Als Problemumgehung können Sie hinzufügen
BOOT_COLOR=1 zu Ihrer ~/.boot/boot.properties Datei
cider-jack-in funktioniert danach für mich

Alle 21 Kommentare

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:

  1. Wenn Sie Windows verwenden oder die 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 darstellt
  2. cider.tasks/nrepl-server übergibt den Wert von boot.repl/*default-middleware* an cider.nrepl/start-nrepl
  3. cider.nrepl/start-nrepl erwartet jedoch Variablen oder Zeichenfolgen, keine Funktionen

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!

@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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

NightMachinary picture NightMachinary  ·  6Kommentare

csdrane picture csdrane  ·  6Kommentare

ukriish picture ukriish  ·  6Kommentare

achikin picture achikin  ·  7Kommentare

lilactown picture lilactown  ·  5Kommentare