clojure / lein REPL con jline
Domanda
Per qualche ragione non riesco a far funzionare clojure REPL con jline, quello che ho fatto è stato clonare il repository clojure su github, quindi eseguire ant per costruirlo, quindi scaricare jline-0.9.94.jar alla directory con clojure.jar, quindi eseguire il seguente comando:
java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.main
E ottenere i seguenti errori:
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)
Ecco i file nella mia directory corrente:
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$
Ho ricevuto lo stesso errore su clojure 1.1 e lein repl(sembra che lein mantenga la propria versione di clojure).
A proposito, questo è su mac ox 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)
Qualcuno sa cosa c'è che non va e come risolverlo?Come voglio davvero far lavorare lein repl per avviare un progetto.
Soluzione
Ho risolto lo stesso problema oggi rimuovendo un jline*.jar
ridondante da /Library/Java/Extensions
, lasciando solo un'installazione Jline in CLASSPATH
.
Spiegazione più lunga: Stavo cercando di costruire labrepl , che installaTutte le sue dipendenze in Subdirectory lib
, ma avevo precedentemente impostato Jline copiando il file .jar su /Library/Java/Extensions
. apparentemente , java.lang.ClassLoader
non è in grado di gestire due impianti di jline, e purché ce ne fossero disponibili in duePosizioni, la riga di comando che inizia un reply Clojure non avrebbe fallito la ricerca di quest'ultima delle classi jline.ConsoleRunner
e clojure.main
, a seconda dell'ordine in cui sono stati assegnati al comando java
.
Spero che questo aiuti.
Altri suggerimenti
Vedi le mie istruzioni alternative per l'installazione sulla mia forcella:
http://github.com/jedschneider/leiningen
Ho inviato una richiesta di tiro per aggiornare il readme, ma non ha ricevuto una risposta su di esso.Una volta installato Lein, puoi mettere il cestino / leingen.sh nel tuo ~ / bin e chiamarlo ovunque.Ho messo una scorciatoia sul mio .bash_profile
alias lein="~/bin/leiningen.sh"
e quindi chiamare lein repl
per avviare una shell
Anche il checkout del labrepl che è un grande strumento di apprendimento.
Vostro java ...
il comando sembra a posto, ricontrollerei se tutti i vasi sono dove pensi che dovrebbero essere (e che sono il vasi che pensi siano, cioè. clojure.jar
è in realtà quello che hai costruito localmente e non uno super-obsoleto).
Se si desidera utilizzare Leiningen per lein repl
, anche questo è possibile.Si noti che non è esatto dire che "mantiene la propria versione di Clojure";Leiningen è uno strumento di compilazione, utilizzato come parte di un flusso di lavoro orientato al progetto, e i vasi Clojure separati sono specifici del progetto.Per creare un progetto di esempio in cui giocare, ad esempio lein new foo
in un posto comodo.Allora avrai bisogno di cd foo
, ottenga i suoi barattoli di Clojure & contrib con lein deps
(il project.clj
scheletro fornito da lein new
contiene già voci per entrambi) e avviare un REPL con lein repl
.
Infine, è possibile utilizzare il nuovo cljr
progetto;ha un README completo che dovrebbe iniziare in pochissimo tempo, e con esso sarai in grado di dire cljr repl
per ottenere un REPL Clojure ovunque, senza la necessità di creare un "progetto".
Ho incontrato lo stesso problema.jline.consolerunner (almeno su Jline-0.9.5 che uso) sembra non essere in grado di trovare file di classe nel percorso aggiunto ai percorsi di ricerca della classe da -cp opzione del comando 'Java'.Significa che non riesce a trovare né classi nella tua directory corrente.Ho risolto questo copiando clojure.main sotto / biblioteca / java / estensioni / anche.