Ошибка компиляции Leiningen с файлами Java, которые ссылаются на классы, созданные из файлов Clojure

StackOverflow https://stackoverflow.com/questions/9336202

Вопрос

У меня есть проект Leiningen, который компилирует файлы Java и Clojure.Файлы Java импортируют некоторые классы, созданные из файлов Clojure (с помощью gen-class).

Когда я выполняю компиляцию lein, я получаю ошибки компиляции при импорте в файлы Java (говоря, что он не может найти классы).Если я удалю файлы Java из проекта, скомпилирую lein, снова добавлю файлы Java и снова скомпилирую lein, все будет работать нормально.

Это похоже на то, что файлы Clojure нужно скомпилировать до файлов Java.

Кстати, я включаю файлы Clojure, которые генерируют классы, в список: aot.

Что здесь не так?

Это было полезно?

Решение

(Код в этом ответе не протестирован, хотя, надеюсь, он должен работать с Leiningen 1.x (для последних значений x).)

Задача compile Leiningen автоматически запускает задачу javac, если в вашем project.clj указан код :java-source-path. Это происходит до компиляции исходных кодов Clojure, потому что я полагаю, что это обычное направление зависимости.

Чтобы обойти это, вы можете использовать ловушку:

родовое слово

Поместите это где-нибудь в путь к классам времени сборки и добавьте

родовое слово

на карту вашего проекта.

Обратите внимание, что javac при прямом вызове по-прежнему не вызывает compile. Вы также можете сделать его эквивалентом compile, например. подключив его следующей функцией:

родовое слово

Последней формой генерирующего кода тега тогда должен быть

родовое слово

(Если вы заставите compile-clj-first-hook не вызывать compile вообще, это может привести к поломке javac / jar.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top