Qui mi sento un po 'sciocco, ma non riesco a compilare Clojure Hello World.Compilare Clojure?
struttura di directory:
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)))
Interazione:
$ 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
così posso caricare e chiamare il file dal REPL, ma doesn' t compilare.
Secondo clojure.org, la compilazione deve
- namespace deve corrispondere il percorso del file classpath-relativa - verificare
- * compilare-path * deve essere nel classpath - controllare
- : argomento gen-classe il modulo ns - check
Ho trovato this post from a year back, per quanto posso dire che sto facendo esattamente lo stesso, ma non funziona.
Cosa mi manca?
sistema: OS X 10.6, Java 1.6.0, Clojure 1.1
Sembra che non possa accettare la mia risposta, quindi dovrò lasciare la domanda aperta fino a quando qualcun altro interverrà. –
È anche importante notare che raramente bisogno di AOT compilare codice Clojure. Il codice Clojure funzionerà perfettamente senza essere compilato, e questo è il modo in cui dovresti eseguirlo. Alcune specifiche funzionalità di interoperabilità Clojure Java in realtà * richiedono * che il codice venga compilato AOT, ma se non si utilizzano tali funzioni, non preoccuparsi di compilare il codice. Se si desidera un jar eseguibile, è possibile semplicemente AOT compilare un file principale con solo una funzione -main per eseguire l'applicazione. Tuttavia, http://www.assembla.com/spaces/clojure/tickets/315-add-support-for-running--main-namespace-from-clojure-main-without-aot – Rayne