Как я могу скомпилировать многомодульный проект maven, где модуль имеет код clojure и java

У меня есть многомодульный проект maven, где один из модулей имеет код java и clojure, для кода clojure требуется pojo из источника java, а для другого класса в источнике java требуется скомпилированный код clojure (я добавил: gen-class и проект компилируется хорошо, даже несмотря на то, что изначально он выдавал ошибку, поскольку не смог увидеть класс java I, когда clojure-maven-plugin и компиляторы выполняют clojure: compile и compile). Но это не работает из внешнего pom, где он управляет несколькими модулями. Будем признательны за любую помощь в поиске решения


person Bijoy    schedule 08.03.2016    source источник
comment
В основном вы должны избегать взаимной зависимости между кодом Java и кодом Clojure. В настоящее время clojure-maven-plugin не может чередовать процессы компиляции между миром java и миром clojure.   -  person Davyzhu    schedule 08.03.2016
comment
Это кажется очень распространенным сценарием, изначально я думал, что будет много решений :)   -  person Bijoy    schedule 08.03.2016


Ответы (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) ничего не делает.

person ez121sl    schedule 08.03.2016
comment
Да, это кажется лучшим решением и, возможно, ответом на данный момент. - person Bijoy; 09.03.2016