Frage
Aus irgendeinem Grund kann ich Clojure REPL nicht mit Jline zum Laufen bringen. Ich habe mit Git das Clojure-Repository von Github geklont und dann Ant ausgeführt, um es zu erstellen. Dann lade ich jline-0.9.94.jar in das Verzeichnis mit Clojure.jar herunter. Führen Sie dann den folgenden Befehl aus:
java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.main
Und erhalte folgende Fehlermeldungen:
Exception in thread "main" java.lang.ClassNotFoundException: clojure.main
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:317)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:375)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at jline.ConsoleRunner.main(Unknown Source)
Hier sind die Dateien in meinem aktuellen Verzeichnis:
vvshs-macbook-2:clojure vvsh$ ls
build.xml clojure-sources-1.2.0-master-SNAPSHOT.jar epl-v10.html src
classes clojure-sources.jar jline-0.9.94.jar test
clojure-1.2.0-master-SNAPSHOT.jar clojure.iml pom-template.xml
clojure-slim-1.2.0-master-SNAPSHOT.jar clojure.jar pom.xml
clojure-slim.jar doc readme.txt
vvshs-macbook-2:clojure vvsh$
Ich habe den gleichen Fehler bei Clojure 1.1 und Lein Repl erhalten (es scheint, dass Lein seine eigene Version von Clojure verwaltet).
Dies gilt übrigens für Mac OS 10.5.8
java version "1.5.0_24"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_24-b02-357-9M3165)
Java HotSpot(TM) Client VM (build 1.5.0_24-149, mixed mode, sharing)
Weiß jemand, was falsch ist und wie man es beheben kann?Da ich Lein Repl wirklich zum Laufen bringen möchte, um ein Projekt zu starten.
Lösung
Ich habe heute das gleiche Problem gelöst, indem ich ein überflüssiges entfernt habe jline*.jar
aus /Library/Java/Extensions
, so dass nur eine Jline-Installation übrig bleibt CLASSPATH
.
Längere Erklärung: Ich habe versucht zu bauen labrepl, wodurch alle seine Abhängigkeiten im Unterverzeichnis installiert werden lib
, aber ich hatte jline zuvor eingerichtet, indem ich die .jar-Datei nach kopierte /Library/Java/Extensions
. Scheinbar, java.lang.ClassLoader
konnte nicht mit zwei Installationen von jline umgehen, und solange solche an zwei Orten verfügbar waren, würde die Befehlszeile, die eine Clojure-REPL startet, die letztere der Klassen nicht finden jline.ConsoleRunner
Und clojure.main
, abhängig von der Bestellung, die ihnen erteilt wurde java
Befehl.
Ich hoffe das hilft.
Andere Tipps
Siehe meine alternativen Anweisungen zur Installation auf meinem Fork:
http://github.com/jedschneider/leiningen
Ich habe eine Pull-Anfrage gesendet, um die Readme-Datei zu aktualisieren, habe aber keine Antwort darauf erhalten.Sobald Sie Lein installiert haben, können Sie bin/leiningen.sh in Ihr ~/bin einfügen und es überall aufrufen.Ich habe eine Verknüpfung zu meinem .bash_profile hinzugefügt
alias lein="~/bin/leiningen.sh"
und dann anrufen lein repl
eine Granate starten
Schauen Sie sich auch das Labrepl an, das ein großartiges Lernwerkzeug ist.
Dein java ...
Der Befehl sieht gut aus. Ich würde noch einmal prüfen, ob alle Gläser dort sind, wo Sie denken, dass sie sein sollten (und dass sie auch sind). Die Gläser, von denen Sie glauben, dass sie es sind, d. h. clojure.jar
ist eigentlich das, das Sie vor Ort erstellt haben, und kein superveraltetes).
Wenn Sie Leiningen nutzen möchten für lein repl
, das ist auch möglich.Beachten Sie, dass es nicht korrekt ist zu sagen, dass es „eine eigene Version von Clojure verwaltet“;Leiningen ist ein Build-Tool, das als Teil eines projektorientierten Workflows verwendet wird, und die separaten Clojure-Jars sind projektspezifisch.Um beispielsweise ein Beispielprojekt zum Ausprobieren zu erstellen lein new foo
an einem geeigneten Ort.Dann müssen Sie es tun cd foo
, Holen Sie sich Ihre Clojure- und Contrib-Gläser mit lein deps
(Die project.clj
Skelett bereitgestellt von lein new
enthält bereits Einträge für beide) und starten Sie einen REPL mit lein repl
.
Endlich könnte man das Neue nutzen cljr
Projekt;Es verfügt über eine umfassende README-Datei, mit der Sie im Handumdrehen loslegen können und mit der Sie alles sagen können cljr repl
um überall eine Clojure REPL zu bekommen, ohne ein „Projekt“ erstellen zu müssen.
Ich habe das gleiche Problem getroffen.Jline.CONSOLERUNNER (zumindest über Jline-0.9.5, das ich verwende), scheint nicht in der Lage zu sein, Klassendateien im Pfad finden zu können, das auf Klassensuchpfade von -CP-Option des "Java-Befehls hinzugefügt wurde.Es bedeutet, dass es keine Klassen in Ihrem aktuellen Verzeichnis finden kann.Ich habe dies gelöst, indem ich Clojure.Main unter / Bibliothek / Java / Erweiterungen / Erweiterungen kopierte.