Me siento un poco tonto aquí, pero no puedo hacer que Clojure Hello World compile.¿Compilando Clojure?
estructura de directorios:
hello-world/
clojure-1.1.0.jar
build/
classes/
src/
test/
hello.clj
hello.clj:
(ns test.hello
(:gen-class))
(defn -main [& args]
(println "Hello" (nth args 0)))
Interacción:
$ cd hello-world
[hello-world]$ java -cp ./clojure-1.1.0.jar:./build/classes:./src clojure.main
Clojure 1.1.0
user=> (require 'test.hello)
nil
user=> (test.hello/-main "there")
Hello there
nil
user=> (compile 'test.hello)
java.io.IOException: No such file or directory (hello.clj:2)
user=> *compile-path*
"classes"
user=> (doseq [p (.split (System/getProperty "java.class.path") ":")] (println p))
./clojure-1.1.0.jar
./build/classes
./src
nil
, así que puede cargar y llamar al archivo de la REPL, pero doesn' t compilar.
Según clojure.org, compilación necesita
- espacio de nombres debe coincidir con la ruta del archivo ruta de clases de relación - comprobar
- * compile-ruta * debe estar en la ruta de clase - Comprobar
- : argumento de clase generación de el formulario ns - cheque
Encontré this post from a year back, por lo que puedo decir que estoy haciendo exactamente lo mismo, pero no funciona.
¿Qué me estoy perdiendo?
Sistema: OS X 10.6, Java 1.6.0, Clojure 1.1
Parece que no puedo aceptar mi propia respuesta, por lo que tendré que dejar la pregunta abierta hasta que alguien más entre en escena. –
También es relevante tener en cuenta que rara vez necesita AOT compilar el código de Clojure. El código de Clojure funcionará perfectamente sin ser compilado, y esa es la forma en que debes ejecutarlo. Algunas funciones de interoperabilidad Clojure Java en realidad * requieren * que su código sea compilado AOT, pero si no está usando esas características, no se moleste en compilar su código. Si desea un archivo ejecutable, puede AOT compilar un archivo principal con solo una función principal para ejecutar la aplicación. Sin embargo, http://www.assembla.com/spaces/clojure/tickets/315-add-support-for-running--main-namespace-from-clojure-main-without-aot – Rayne