2010-07-10 17 views
6

Por alguna razón no puedo conseguir que clojure REPL trabaje con jline, lo que hice fue clonar el repositorio de clojure de github y ejecutar run para compilarlo, luego descargué jline-0.9.94. jar al directorio con clojure.jar, a continuación, ejecute el siguiente comando:clojure/lein REPL con jline

java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.main 

y obtener los siguientes errores:

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) 

aquí están los archivos en mi directorio actual:

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$ 

Recibí el mismo error en clojure 1.1 y lein repl (parece que lein mantiene su propia versión de clojure).

Por cierto, esto es en 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) 

Alguien sabe lo que está mal y cómo solucionarlo? Como realmente quiero que me sigan trabajando para comenzar un proyecto.

+0

En realidad, esta configuración funciona para mí en un entorno casi idéntico (OSX, Clojure desde la fuente, jline, misma línea de comandos). –

Respuesta

3

He resuelto el mismo problema hoy al eliminar un jline*.jar redundante de /Library/Java/Extensions, dejando solo una instalación de jline en CLASSPATH.

explicación más larga: yo estaba tratando de construir labrepl, que se instala en todas sus dependencias subdirectorio lib, pero me habían configurado previamente jline copiando el archivo .jar a /Library/Java/Extensions. Apparently, java.lang.ClassLoader no pudo manejar dos instalaciones de jline, y mientras haya disponibles en dos lugares, la línea de comando que comienza con Clojure REPL fallaría al encontrar la última de las clases jline.ConsoleRunner y clojure.main, dependiendo del orden que se les dio al comando java.

Espero que esto ayude.

+0

Gracias, todo funciona ahora, no puedo creer que eliminarlo simplemente resuelva el problema. –

+0

Me golpeó también. Ver [esta respuesta] (http://stackoverflow.com/questions/4655852/why-is-my-javap-output-different-than-yours-for-the-same-jar-file/5530443#5530443) para otro versión del mismo problema. – Lyle

1

ver mis instrucciones alternativas para instalar en mi tenedor:

http://github.com/jedschneider/leiningen

envié una solicitud de extracción para actualizar el readme, pero no conseguir una respuesta en él. una vez que haya instalado, puede poner bin/leiningen.sh en su ~/bin y llamarlo a cualquier parte. i poner un acceso directo en mi .bash_profile

alias lein="~/bin/leiningen.sh"

y luego llamar lein repl para lanzar un proyectil

también comprobación del labrepl que es una gran herramienta de aprendizaje.

http://github.com/relevance/labrepl

+0

Gracias por la buena herramienta, conseguí que la lein repl funcionara usando el método de pyrtsa. –

0

Su comando java ... se ve bien, me vuelva a comprobar si todos los frascos están donde usted piensa que debería ser (y que son los frascos usted piensa que son, es decir, es en realidad el clojure.jar uno que construiste localmente y no uno superdotado).

Si desea utilizar Leiningen para lein repl, también es posible. Tenga en cuenta que no es exacto decir que "mantiene su propia versión de Clojure"; Leiningen es una herramienta de compilación, que se utiliza como parte de un flujo de trabajo orientado a proyectos, y los frascos Clojure por separado son específicos del proyecto. Para crear un proyecto de muestra para jugar, diga lein new foo en algún lugar conveniente. Luego necesitará cd foo, obtenga sus jarrones contributivos Clojure & con lein deps (el esqueleto project.clj provisto por lein new ya contiene entradas para ambos) y comience una REPL con lein repl.

Finalmente, puede usar el nuevo ; tiene un README completo que debe comenzar en muy poco tiempo, y con él podrá decir cljr repl para obtener un Clojure REPL en cualquier lugar, sin la necesidad de crear un "proyecto".

+0

Ah, dicho sea de paso, si quieres una compilación nueva de Clojure, es mejor que vayas a http://build.clojure.org/ y obtengas un jar desde allí. Y si está comenzando con el idioma (no es evidente a partir de la pregunta si lo es o no, pero si), probablemente debería quedarse con 1.1. –

+0

Gracias, soy un principiante, así que creo que todas las características en 1.1 serán suficientes para aprender :) –

0

Me encontré con el mismo problema. jline.ConsoleRunner (al menos sobre jline-0.9.5 que uso) parece no ser capaz de encontrar archivos de clase en la ruta agregada a las rutas de búsqueda de clases desde la opción -cp del comando 'java'. Significa que no puede encontrar ninguna clase en su directorio actual. Lo resolví copiando clojure.main en/Library/Java/Extensions/too.