Перейти к основному содержимому

История языка Groovy

Разработчику Архитектору

Play ITЗагрузка интерактивного демо…

Play ITЗагрузка интерактивного демо…


История языка Groovy

Groovy появился в начале 2000-х как язык-компаньон Java для JVM — тот же байт-код и библиотеки, но короче синтаксис, скрипты без main, замыкания и метапрограммирование. Заменить Java он не задумывался — цель была ускорить автоматизацию, тесты и конфигурацию в Java-экосистеме.

Подробнее о том, что переносится из Java без правок, а что отличается: Groovy и Java: совместимость.


Хронология

ПериодСобытие
авг. 2003James Strachan публикует в блоге первое описание языка для JVM
2003–2006Серия предварительных релизов; после старта стандартизации JCP нумерацию сменили — "1.0" стала первым "официальным" номером
2004JSR-241 — стандартизация в Java Community Process; инкубатор Apache
2 янв. 2007Groovy 1.0 — первая стабильная версия
дек. 2007Groovy 1.1 из‑за крупных изменений перенумеровали в 1.5
2007Гийом Лафорж (Guillaume Laforge) возглавляет проект и комитет JSR-241
2007Spring 2.5 — конфигурация через Groovy
2008Grails 1.0 — веб-фреймворк на Groovy + Spring + Hibernate
осень 2008Компания G2One (развитие Groovy и Grails) переходит к SpringSource; далее через VMware, Pivotal, EMC активы языка в 2017 году оказываются у Dell
2009Gradle (Groovy DSL); Groovy в Jenkins (Hudson)
июль 2009Strachan в блоге признаёт, что при знакомстве со Scala в 2003 году, возможно, не создал бы Groovy
2011Spock 1.0; Java 7 / invokedynamic готовит почву для ускорения
2012Groovy 2.0@CompileStatic, @TypeChecked, invokedynamic
2014Java 8 (лямбды, Stream) — вопрос "зачем Groovy" в прикладной разработке
2015Groovy становится проектом верхнего уровня Apache Software Foundation (Apache Groovy)
2020Groovy 3.0var, text blocks, switch expressions в духе новых Java
2022Groovy 4.0 — JDK 17, модульность, Jakarta EE
2020-еНиша: Gradle, Jenkins Pipeline, Spock, скрипты и DSL

James Strachan за год до релиза 1.0 покинул проект; с 2007 года им руководит Guillaume Laforge. Коммерческое развитие шло через G2One (Groovy и Grails), затем SpringSource и цепочку слияний (VMware → Pivotal → EMC → Dell в 2017 году); с 2015 года язык развивается под эгидой Apache как открытый проект.


Groovy на JVM - история появления

В Java до 5–8 не хватало лаконичности — POJO с геттерами, шаблонный код, слабое скриптование. Perl, Python и Ruby показывали, как быстрее писать утилиты. На JVM уже были Jython и JRuby, но Groovy выбрал путь максимальной близости к Java по синтаксису и семантике — чтобы миллионы Java-разработчиков могли начать без смены парадигмы.

Пример сжатия (идея эпохи):

// Java — много шаблонного кода
public class Person {
private String name;
private int age;
public Person(String name, int age) { this.name = name; this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
// Groovy — те же поля, геттеры/сеттеры неявно
class Person {
String name
int age
}
def p = new Person(name: 'Alice', age: 30)

Ключевые релизы

1.0 (2007) — стабильная грамматика, GDK (each, collect, findAll), скриптовый режим, бинарная совместимость с Java-классами на практике.

2.0 (2012) — гибридная модель: динамика по умолчанию, @CompileStatic для модулей с производительностью близкой к Java; @TypeChecked для раннего поиска ошибок без отказа от MetaClass.

3.0 / 4.0 — подтягивание синтаксиса к Java 11–17 (var, многострочные строки, улучшенная статическая компиляция), поддержка современных JVM без ломки старых скриптов.


Экосистема, которая закрепила язык

  • Gradle — исполняемые build.gradle, внутренние DSL; даже с Kotlin DSL миллионы проектов остаются на Groovy.
  • Jenkins — scripted/declarative pipeline, shared libraries на Groovy.
  • Spock — BDD-спецификации (given-when-then) для JVM-тестов.
  • Grails — full-stack с конвенциями (GORM, контроллеры); пик популярности ~2008–2014, затем конкуренция Spring Boot; Grails 3+ сам строится на Spring Boot.
  • Ratpack — лёгкий фреймворк для HTTP-сервисов и веб-API.
  • Griffon — фреймворк для настольных приложений на Groovy.

Groovy также встроен в платформенное ПО как язык расширения — генератор отчётов JasperReports / iReport (выражения в отчётах), SoapUI (тестовые сценарии веб-сервисов), Jenkins (автоматизация CI).

// Spock — типичный стиль
def "withdrawal fails when insufficient funds"() {
given:
account.balance = 100
when:
account.withdraw(150)
then:
thrown(InsufficientFundsException)
}

Кризис после Java 8 и современная роль

Java 8+ закрыл часть разрыва (лямбды, Stream, Optional). Groovy сохранил нишу там, где важны скрипт без класса, DSL, runtime-метапрограммирование, GString, ?., ?:, встроенные JSON/XML-билдеры.

Сегодня Groovy — инфраструктурный и спецификационный — сборка, CI, тесты, конфигурация, встраиваемые правила. Стратегия Apache Groovy — обратная совместимость и постепенная модернизация под новые JDK.


Выводы для практики

  1. Совместимость с Java — стратегический актив: старые скрипты и Gradle-файлы продолжают работать при обновлении Groovy.
  2. Нишевая специализация устойчивее, чем ставка на один фреймворк (урок Grails и инфраструктура Gradle/Jenkins).
  3. Гибридность (def + @CompileStatic) — осознанный выбор по слою, а не "всё динамическое".
  4. Институционализация (Apache PMC) важна для долгоживущих enterprise-инструментов.

Связанные материалы


В подборках

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

ИсторияИстория языка Ruby, История языка Rust, История языка Go, История языка Swift, История языка Kotlin, История языка Lua.