Вообще говоря, существует два подхода для интеграции Groovy с Java:
- Заставить Java-код скомпилироваться и выполнить Groovy-код во время выполнения
- Скомпилируйте и упакуйте код Groovy как часть вашей сборки, так же, как вы делаете для кода Java
Используйте 1., если вам нужно решение для "сценариев", а код Groovy, который нужно выполнить, известен только во время выполнения. Например, код можно загрузить из базы данных или ввести на экране графического интерфейса. Если вы просто хотите упростить свою жизнь, написав некоторые части своего приложения на Groovy, перейдите к 2. Два типичных примера, которые могут быстро окупиться, - это анализ XML и тестирование (конечно, их гораздо больше).
Если вы более заинтересованы в 2., вы можете скомпилировать Groovy и Java отдельно или вместе. Если вы компилируете их отдельно, статические ссылки могут идти только в одном направлении, как если бы у вас было два Java-модуля. Если вы скомпилируете их вместе, вы можете произвольно смешивать код Groovy и Java, как если бы это был весь код Java в одном модуле.
Компиляция кода Java и Groovy возможна благодаря функции компилятора Groovy, называемой Совместная компиляция . К сожалению, у GMaven есть серьезные проблемы с совместной компиляцией, и нет никаких признаков того, что это изменится в ближайшее время. Для небольших проектов это может сойти с рук, но для более крупных проектов это укусит вас (я был там). Есть решения, но они не приходят бесплатно. Если вы открыты для (G) альтернатив Maven, рассмотрите возможность перехода на Gradle , который имеет гораздо лучшую поддержку Groovy. (Отказ от ответственности: я один из разработчиков Gradle.)
Если вы решили придерживаться GMaven, убедитесь, что вы правильно настроили его конфигурацию. Почти каждый проект, который я вижу, терпит неудачу на этом этапе, часто даже не осознавая этого. Документация GMaven устарела, но список рассылки Groovy содержит несколько сообщений на эту тему. Вы также можете скопировать конфигурацию из Spock (один из моих собственных проектов).
Чтобы включить совместную компиляцию GMaven, добавьте цель generateStubs
. Пока ваш проект компилируется без этой цели, оставьте его. Также есть цель generateTestStubs
, но она редко нужна.
Это рассказ. Для долгой истории, посмотрите будущую книгу Мэннинга Создание Java Groovy . (Я не связан с автором.)