clojure compilation

¿Compilando Clojure?



compilation (2)

¿Por qué no usas Leiningen ? Es mucho más fácil de usar que compilar el código manualmente. Puedes usar mi artículo al respecto como introducción ...

Me siento un poco tonto aquí, pero no puedo hacer que Clojure Hello World se compile.

Estructura de directorios:

hello-world/ clojure-1.1.0.jar build/ classes/ src/ test/ hello.clj

hola.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 puedo cargar y llamar al archivo desde el REPL, pero no se compila.

Según clojure.org , las necesidades de compilación.

  • el espacio de nombres debe coincidir con la ruta de acceso relativa del archivo classpath - verificar
  • * compile-path * debe estar en el classpath - check
  • : gen-class argumento a la forma ns - cheque

Encontré esta publicación de hace un año , por lo que sé, estoy haciendo exactamente lo mismo, pero no funciona.

¿Qué me estoy perdiendo?

Sistema: OS X 10.6, Java 1.6.0, Clojure 1.1


Lo tengo, hay un cuarto requisito:

  • * compile-path * se resuelve en relación con el directorio de trabajo de las JVM, normalmente el directorio donde se inicia java. O por REPL: (System/getProperty "user.dir") ,

Así que esto funciona:

user=> (set! *compile-path* "build/classes") "build/classes" user=> (compile ''test.hello) test.hello