У меня есть многомодульный проект maven, где один из модулей имеет код java и clojure, для кода clojure требуется pojo из источника java, а для другого класса в источнике java требуется скомпилированный код clojure (я добавил: gen-class и проект компилируется хорошо, даже несмотря на то, что изначально он выдавал ошибку, поскольку не смог увидеть класс java I, когда clojure-maven-plugin и компиляторы выполняют clojure: compile и compile). Но это не работает из внешнего pom, где он управляет несколькими модулями. Будем признательны за любую помощь в поиске решения
Как я могу скомпилировать многомодульный проект maven, где модуль имеет код clojure и java
Ответы (1)
Как сказано в одном из комментариев, clojure-maven-plugin не может обрабатывать циклические зависимости между кодом Java и Clojure в одном модуле. Код Java компилируется перед кодом Clojure.
Но вы можете реструктурировать код, чтобы исключить циклические зависимости. Разделите проект Java + Clojure (модуль maven) на три части:
- Базовый модуль Java
- Кложурный модуль
- 2-й Java-модуль
Базовый модуль Java, по крайней мере, будет включать в себя POJO, который нужен модулю Clojure, и, возможно, другие общие вещи. Модуль Clojure будет содержать весь код Clojure, а второй модуль Java будет содержать часть кода Java, для которой требуется класс, сгенерированный компилятором Clojure. Плагин clojure-maven-plugin требуется только для модулей Clojure.
Затем вы можете установить зависимости между этими модулями, например:
- Модуль Clojure зависит от артефакта Base Java
- Второй модуль Java зависит от базовой Java и артефактов Clojure.
Пока компиляция AOT правильно настроена в модуле Clojure, теперь все должно компилироваться. Я считаю, что clojure-maven-plugin AOT-компилирует все пространства имен по умолчанию. Без компиляции AOT (gen-class)
ничего не делает.