Je me sens un peu bête ici, mais je n'arrive pas à compiler Clojure Hello World.Compilation de Clojure?
Structure du répertoire:
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)))
Interaction:
$ 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
donc je peux charger et appeler le fichier à partir du REPL, mais il n » t compiler.
Selon clojure.org, la compilation a besoin
- espace de noms doit correspondre chemin du fichier classpath-parent - vérifier
- * compilation chemin * doit être sur le chemin de classe - vérifier
- : Argument gen-classe la forme de ns - vérifier
J'ai trouvé this post from a year back, autant que je peux dire que je fais exactement la même chose, mais cela ne fonctionne pas.
Qu'est-ce qui me manque?
Système: OS X 10.6, Java 1.6.0, Clojure 1.1
Il semblerait que je ne puisse pas accepter ma propre réponse, alors je vais devoir laisser la question ouverte jusqu'à ce que quelqu'un d'autre intervienne. –
Il est également important de noter que vous avez rarement besoin de compiler AOT code Clojure. Le code de Clojure fonctionnera très bien sans être compilé, et c'est ainsi que vous devriez l'exécuter. Certaines fonctionnalités d'interopérabilité Clojure Java spécifiques * requièrent * que votre code soit compilé AOT, mais si vous n'utilisez pas ces fonctionnalités, ne vous embêtez pas à compiler votre code. Si vous voulez un fichier exécutable, vous pouvez juste AOT compiler un fichier principal avec juste une fonction -main pour exécuter l'application. Cependant, http://www.assembla.com/spaces/clojure/tickets/315-add-support-for-running--main-namespace-from-clojure-main-without-aot – Rayne