Czuję się tutaj trochę głupio, ale nie mogę zdobyć Clojure Hello World do kompilacji.Kompilacja Clojure?
Struktura katalogów:
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)))
Interakcje:
$ 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
Więc mogę załadować i wywołać plik z REPL, ale nie robi” t skompilować.
Według clojure.org, kompilacja musi
- nazw musi odpowiadać ścieżce klasy względne ścieżki pliku - sprawdź
- * kompilacji ścieżki * musi być na ścieżce klasy - sprawdź
- : gen klasy argumentu ns forma - sprawdź
Znalazłem this post from a year back, o ile mogę powiedzieć, że robię dokładnie to samo, ale to nie działa.
Czego mi brakuje?
System: OS X 10.6, Java 1.6.0, Clojure 1,1
Wygląda na to, że nie mogę przyjąć mojej własnej odpowiedzi, więc będę musiał zostawić to pytanie otwarte, dopóki ktoś inny nie zadzwoni. –
Należy również pamiętać, że rzadko trzeba AOT skompilować kod Clojure. Kod Clojure będzie działał dobrze bez kompilacji, i to jest sposób, w jaki powinieneś go uruchomić. Niektóre konkretne funkcje współdziałania Java Clojure * wymagają *, aby twój kod był skompilowany AOT, ale jeśli nie korzystasz z tych funkcji, nie przejmuj się kompilowaniem kodu. Jeśli chcesz wykonać plik wykonywalny, możesz po prostu skompilować plik główny za pomocą funkcji -nain, aby uruchomić aplikację. Jednak http://www.assembla.com/spaces/clojure/tickets/315-add-support- for-running--main-namespace-from-clojure-main- without- – Rayne