Компиляция Clojure?

Я чувствую себя немного глупым здесь, но я не могу заставить Clojure Привет Мир компилировать.

Структура каталогов:

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)))

Участие:

$ 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

Таким образом, я могу загрузить и назвать файл от REPL, но он не компилирует.

Согласно clojure.org, потребностям компиляции

  • пространство имен должно соответствовать пути файла прямого доступа пути к классу - проверка
  • *путь компиляции* должен быть на пути к классу - проверка
  • Аргумент:gen-класса форме нс - проверка

Я нашел это сообщение с года назад, насколько я могу сказать, что делаю точно то же, но оно не работает.

Что я пропускаю?

Система: OS X 10.6, Java 1.6.0, Clojure 1.1

16
задан Community 23 May 2017 в 12:09
поделиться

2 ответа

Почему вы не используете Leiningen ? Его намного проще использовать, чем компилировать код вручную. Вы можете использовать мою статью как введение ...

11
ответ дан 30 November 2019 в 17:27
поделиться

Понятно, есть четвертое требование:

  • * compile- path * разрешается относительно рабочего каталога JVM, обычно каталога, в котором запускается java. Или с помощью REPL: (System / getProperty "user.dir") ,

Итак, это работает:

user=> (set! *compile-path* "build/classes")     
"build/classes"
user=> (compile 'test.hello)
test.hello
21
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: