2009-06-20 3 views
12

У меня есть ситуация, когда некоторые из моих строк кода ссылаются на мои java-файлы, но у меня также есть разные java-файлы, которые ссылаются на один и тот же код groovy. Когда вы пытаетесь скомпилировать maven, мне нужно собрать компиляцию до или после java, и это не будет работать, поскольку код groovy зависит от некоторых java-файлов, а разные java-файлы зависят от кода groovy. Есть ли способ справиться с такой зависимостью?maven compile groovy

ответ

8

Вы должны скомпилировать свой код, добавив плагин gmaven к вашему maven pom.xml. Он генерирует Java-заглушки вашего groovy-кода, чтобы иметь дело с типом межязыкового реферирования, с которым вы имеете дело. Я использую его совсем немного, и он работает очень хорошо.

0

Вы можете разбить свой код слоями и сложить нижние слои верхнего уровня, но не наоборот. Например, в веб-приложении вы можете иметь уровень представления, уровень обслуживания и уровень сохранения. Уровень просмотра вызывает уровень обслуживания, а уровень обслуживания вызывает уровень сохранения, но уровень сохранения никогда не будет вызывать уровень обслуживания или уровень представления. Если вы хотите, чтобы код groovy/java существовал на одном слое, убедитесь, что вы вызываете другого, но оба они не звонят друг другу. Суть в том, что вам следует избегать двунаправленных зависимостей.

+0

-1 Существует совместный компилятор Groovy-Java. –

+0

Это правда, но с двунаправленными зависимостями может привести к излишне сложному и менее обслуживаемому коду. В контексте этого вопроса я согласен с тем, что использование GMaven - правильный ответ, но я бы все же реорганизовал код для устранения или, по крайней мере, уменьшения двунаправленных отношений. – rich

11

Да, просто используйте GMaven. Поскольку он является совместным компилятором, он автоматически управляет вашей java с помощью groovy и groovy для java-зависимостей.

Вкратце, вам необходимо:

  • включают gmaven-plugin в вашем pom.xml;
  • держите свои классные классы под src/main/groovy или src/test/groovy;
  • привязывает плагин gmaven к соответствующим этапам жизненного цикла.

Для получения более подробной информации см. building groovy projects.

Смежные вопросы