Почему плагин gradle-clojure пропускает задачу compileClojure? - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь написать плагин для Intellij в Clojure. С этой целью я хочу реализовать некоторые конечные точки расширения с функциональностью Clojure :gen-class. Я добавил плагин gradle-clojure и поместил код Clojure в src/main/clojure. Но когда я строю проект, он говорит

> Task :compileClojure SKIPPED

Почему это?

Кроме того, на соответствующей заметке: если я добавлю выражение (throw (Exception. "abort")) в код Clojure на верхнем уровне, я могу вывести из строя сборку. Это не имеет смысла для меня. Почему код Clojure будет исполнен во время сборки?

1 Ответ

0 голосов
/ 04 ноября 2018

В Clojure предварительная компиляция не требуется. Исходный код может быть скомпилирован при первом запуске, если исходный код упакован в файл .jar.

В частности, для gradle-clojure задача по умолчанию build будет запускаться checkClojure, которая вызовет функцию Clojure load для каждого исходного каталога, которая загружает все пространства имен. Когда вы загружаете пространство имен, его выражения выполняются по порядку. Обычно вы бы указали только def или defn, которые бы просто определяли глобальные переменные. Это сделано для того, чтобы перед компоновкой в ​​.jar не было ошибок компилятора.

Задача gradle-clojure compileClojure будет компилировать только те пространства имен, которые сконфигурированы с aotNamespaces или со всеми из них, если используется aotAll(). В этом случае он будет вызывать Clojure compile для каждого пространства имен. Для получения дополнительной информации см. Документацию gradle-clojure .

Подробнее о компиляции Clojure см. в этой документации

...