Первая программа на Groovy
Play ITЗагрузка интерактивного демо…
Первая программа на Groovy
Где применяют Groovy
Groovy — динамический язык на JVM: синтаксис ближе к Python, совместимость с Java-классами. Используют в Gradle, Jenkins pipeline, скриптах автоматизации, предметных DSL (математика, обработка научных данных, отчёты) и legacy-проектах.
Типичные точки встречи с языком:
- Gradle — сборка Android и Java-проектов;
- Jenkins — pipeline и shared libraries;
- Spock — выразительные тесты к Java/Kotlin-коду;
- JasperReports / iReport — выражения и логика внутри отчётов;
- SoapUI — сценарии тестирования веб-сервисов.
Первая программа — println в groovy / groovyc.
Самый короткий скрипт без класса и без IDE:
println 'Hello, Groovy!'
Классический пример с функциями — последнее выражение в теле метода возвращается автоматически:
Код ITЗагрузка примера кода…
Разбор:
helloFunction— метод сdef; GString"Hello, ${name}"подставляет аргумент.sumбезreturn— Groovy возвращает значение последнего выражения (a + b).subtraction(double a, double b)— явные типы параметров, как в Java; здесь нужен явныйreturn.- Вызов
helloFunction('Groovy!')допускает скобки или их отсутствие у одноаргументных методов.
Разбор короткого скрипта:
println— встроенный метод Groovy: печатает аргумент в stdout и добавляет перевод строки (аналогSystem.out.printlnв Java, но короче).- Строка в одинарных кавычках
'Hello, Groovy!'— обычныйStringбез интерполяции: всё внутри кавычек выводится буквально. - Файл
.groovyбезclassиmainкомпилируется как подклассgroovy.lang.Script; при запускеgroovy script.groovyвыполняются инструкции верхнего уровня по порядку. - Результат в консоли — одна строка
Hello, Groovy!— этого достаточно, чтобы проверить, что JDK, Groovy и PATH настроены. - Такой формат удобен для одноразовых скриптов; для библиотек и приложений позже добавляют
classиstatic void main.
Перед стартом: что знать перед Groovy. После Hello World логично перейти к типам данных и Groovy и Java.
Выполните нижеследующее задание.
А теперь давайте немного попрактикуемся и посмотрим, как выглядит работа с Groovy. Пройдитесь и выполните все действия по алгоритму, но на каждом шаге старайтесь исследовать то, что на экране, чтобы понимать.
Установка программ обычно выглядит так (NetBeans и JDK — отдельные мастера; Groovy идёт через JVM):
Play ITЗагрузка интерактивного демо…
-
Установите Apache NetBeans и запустите (на рабочем столе будет ярлык).
-
Выберите "New Project" (или File – New Project).
-
Выберите "Groovy with Gradle" (в списке шаблонов – Groovy with Gradle – Groovy Application).
-
Заполните сведения о проекте:
- Project Name: gradleproject1 – можете задать своё имя;
- Project Location – выберите папку, где будет храниться проект;
- Project Folder – укажет путь к проекту;
- Package Name – com.test.gradleproject1;
- Java Version – укажите свою версию (или последнюю доступную);
- Gradle DSL – нам нужен Groovy.
-
Проверьте всё и нажмите Finish – IDE подготовит проект.
-
В левой части окна будет структура проекта.
-
В правой части окна будет код со стандартным шаблоном:
package com.test.gradleproject1
class App {
String getGreeting() {
return 'Hello World!'
}
static void main(String[] args) {
println new App().greeting
}
}
Разбор:
package com.test.gradleproject1задаёт пакет: скомпилированный класс окажется в папкеcom/test/gradleproject1/, как в Java.class App— обычный класс приложения; Gradle/NetBeans подставляют его как точку входа в шаблоне Groovy Application.String getGreeting()— метод с явным типом возврата;return 'Hello World!'возвращает строку (можно опуститьreturn, если последнее выражение в методе — значение).static void main(String[] args)— точка входа JVM: при Run IDE вызывает именно этот метод.println new App().greeting— создаётся экземплярApp, вызывается геттерgetGreeting()(в Groovy свойствоgreeting— это вызовgetGreeting()), результат печатается в Output.
-
Чтобы запустить проект, нужно нажать правой кнопкой мыши на проекте в структуре и выбрать "Run" или нажать зеленую кнопку на панели инструментов.
-
Если всё успешно – то в нижней части окна в панели Output будет полная информация о процессе сборки, и вывод исполнения команды. Наша программа просто должна вывести сообщение "Hello World!", и это мы можем увидеть именно там:

Как можно заметить, язык и принципы построения очень похожи на Java — класс, main, типы полей.
Запуск без IDE
После установки Groovy (SDKMAN, дистрибутив Apache Groovy или sdk install groovy) создайте файл hello.groovy:
println 'Hello, Groovy!'
def name = args ? args[0] : 'World'
println "Hello, $name"
Разбор:
- Первая строка
println 'Hello, Groovy!'всегда выполняется и не зависит от аргументов командной строки. def name = args ? args[0] : 'World'—defобъявляет локальную переменную; тернарный оператор — если массивargsнепустой, берётся первый аргумент, иначе'World'.argsв скрипте — этоString[]аргументов CLI (как вmainу Java); приgroovy hello.groovy Aliceвargs[0]будетAlice.println "Hello, $name"— GString в двойных кавычках:$nameподставляется в строку на этапе выполнения.- При запуске без аргументов вывод —
Hello, Groovy!иHello, World; сAlice— второе приветствиеHello, Alice.
Запуск:
groovy hello.groovy Alice
Разбор:
groovy— команда интерпретатора/рантайма Groovy (должна быть в PATH после установки SDKMAN или дистрибутива Apache Groovy).hello.groovy— путь к файлу скрипта; интерпретатор выполнит его построчно.Alice— первый аргумент командной строки; в скрипте он попадёт вargs[0](см. пример выше).- Порядок: сначала компиляция/подготовка скрипта, затем выполнение; ошибки синтаксиса покажутся до запуска логики.
- Успешный прогон завершается кодом 0 и двумя строками приветствия в терминале.
Скрипт без объявления class компилируется в подкласс groovy.lang.Script; args — аргументы командной строки.
Интерактивный REPL — groovysh (удобно проверять выражения без файла):
groovy:000> 2 + 3
===> 5
groovy:000> def x = [1, 2, 3]
===> [1, 2, 3]
groovy:000> x.sum()
===> 6
Разбор:
- Приглашение
groovy:000>— номер введённой команды в сессии REPL. 2 + 3вычисляется сразу;===> 5— результат последнего выражения (в Groovy почти всё — выражение с значением).def x = [1, 2, 3]создаёт список; литерал[...]— тот же синтаксис, что в скриптах и Gradle.x.sum()— метод GDK для коллекций (сумма элементов); в чистой Java дляList<Integer>писали бы цикл или stream.- Выход:
:qили Ctrl+D — сессия не сохраняется в файл, пока вы сами не скопируете код.
Частые ошибки
| Симптом | Причина |
|---|---|
groovy не найден | SDKMAN/Java не настроены |
MissingPropertyException | Переменная без def в скрипте — используйте def name |
| Несовместимость с Java | Нужен JDK той же major-версии |
Что попробовать
Вызов Java из Groovy — без импорта java.util.*, если класс из JDK:
import java.time.LocalDate
def today = LocalDate.now()
println "Сегодня: $today"
Разбор:
import java.time.LocalDate— тот же импорт, что в Java; Groovy компилируется в байт-код JVM и видит классы JDK.LocalDate.now()— статический метод Java 8+; тип выводится, можно писатьdef today.- GString подставляет значение
today(уLocalDateесть читаемыйtoString()). - Любая Java-библиотека из classpath (Maven/Gradle) вызывается так же:
new SomeService().run().
@Grab в скрипте — подтянуть JAR без отдельного build.gradle:
@Grab('org.apache.commons:commons-lang3:3.14.0')
import org.apache.commons.lang3.StringUtils
println StringUtils.capitalize('groovy')
Разбор:
@Grab('group:artifact:version')— аннотация Grape: при первом запуске скрипта скачивает артефакт из Maven Central (нужен доступ в сеть).- После загрузки классы из JAR доступны как при обычной зависимости Gradle.
StringUtils.capitalize— пример вызова Java-API из сторонней библиотеки.- Для продакшена и CI надёжнее фиксировать зависимости в Gradle/Maven, а не только
@Grab.
Gradle — см. Gradle Groovy DSL и Jenkins Pipeline.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Первые шаги (маршрут подборки) — Первая программа на Smalltalk, Первая программа на Haskell, Первая программа на Lua, Первая программа на Scala, Первая программа на Swift, Первая программа на Elixir.