Перейти до вмісту

Groovy

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні

SEO title: Groovy — динамічна й статична JVM-мова для scripting, Gradle, DSL, Jenkins pipelines, Spock, Grails і Java-інтеграції SEO description: Groovy — Wiki-стаття про Apache Groovy як мультипарадигмальну мову програмування для JVM. Розглянуто Groovy 5, Java interoperability, динамічну й статичну типізацію, scripts, closures, collections, GDK, AST transforms, DSL, Gradle, Jenkins Pipeline, Spock Framework, Grails, GroovyShell, Grape, metaprogramming, testing, JSON/XML, автоматизацію, CI/CD, обмеження, продуктивність, безпеку та практичне використання Groovy у бізнесі, DevOps, backend і інтеграціях. SEO keywords: Groovy, Apache Groovy, Groovy 5, JVM language, Java interoperability, Gradle Groovy DSL, Jenkins Pipeline Groovy, Spock Framework, Grails, Groovy scripting, Groovy DSL, Groovy closures, Groovy collections, Groovy GDK, AST transforms, GroovyShell, Groovy metaprogramming, static compilation Groovy, dynamic typing Groovy, Jenkinsfile, CI/CD Groovy, testing Groovy, Java Groovy integration, програмування Groovy Alternative to: довгий Java boilerplate для scripts; XML-heavy build scripts; ручна автоматизація без JVM; shell scripts без Java libraries; тестування Java без виразного DSL; CI/CD pipelines без Jenkinsfile; Java-код без closures і concise syntax; DSL без гнучкої JVM-мови; внутрішні automation scripts без доступу до Java ecosystem


Groovy або Apache Groovy — це мультипарадигмальна мова програмування для JVM, яка поєднує Java-подібний синтаксис із динамічною типізацією, статичною перевіркою, closures, scripting, DSL-можливостями та глибокою інтеграцією з Java.

Groovy часто використовують для:

  • scripts;
  • automation;
  • Gradle build scripts;
  • Jenkins pipelines;
  • Spock tests;
  • Grails web applications;
  • DSL;
  • CI/CD;
  • integration scripts;
  • роботи з JSON/XML;
  • Java interoperability;
  • internal tools.

Коротко: Groovy — це “Java без зайвої церемонності”: коротший синтаксис, scripts, closures, DSL і доступ до всієї JVM-екосистеми. Його часто люблять не за теорію, а за практичність в automation, build tools і тестуванні.

Офіційна сторінка Apache Groovy описує Groovy як multi-faceted language for the JVM із Java-like syntax, productivity features, OO і functional paradigms, static and dynamic natures, scripts і DSL. [1]

Головна ідея

Головна ідея Groovy — зробити JVM-розробку гнучкішою, коротшою й зручнішою, не відриваючись від Java ecosystem.

Groovy дозволяє:

  • писати scripts на JVM;
  • використовувати Java libraries;
  • створювати DSL;
  • зменшувати boilerplate;
  • писати expressive tests;
  • автоматизувати CI/CD;
  • будувати Gradle scripts;
  • працювати з JSON/XML коротко;
  • обирати dynamic або static style;
  • інтегруватися з існуючим Java-кодом.

Проста аналогія: Java — це строгий офісний костюм. Groovy — це той самий офіс, але без краватки: JVM лишається, Java libraries лишаються, але писати можна швидше й вільніше.

Актуальна версія

Станом на травень 2026 року офіційна сторінка Apache Groovy Download зазначає, що Groovy 5.0 є latest stable version, designed for JDK11+. Також вказано, що Groovy 6.0 — next major version для JDK17+, але alpha releases не рекомендовані для production. [2]

Офіційна документація Groovy показує версію 5.0.5 серед доступних актуальних documentation versions. [3]

Changelog Apache Groovy також показує активні релізи гілок Groovy 5.0.x і 4.0.x у 2026 році, зокрема Groovy 4.0.32 від 4 травня 2026 року. [4]

Для документації: у Groovy-проєктах важливо вказувати не тільки Groovy version, а й JDK version. Groovy 5 орієнтований на JDK 11+, а Groovy 6 — на JDK 17+.

Groovy і Java

Groovy працює на JVM і дуже тісно інтегрується з Java.

Це означає:

  • Groovy може викликати Java classes;
  • Java може використовувати Groovy classes;
  • Groovy працює з Maven/Gradle dependencies;
  • можна використовувати Java libraries;
  • можна запускати Groovy у JVM application;
  • можна змішувати Java і Groovy в одному проєкті.

Приклад Java-подібного Groovy-коду:

class Customer {
    String name
    Integer age
}

def customer = new Customer(name: "Anna", age: 17)
println customer.name

Groovy зменшує boilerplate, але лишається близьким до Java.

JVM

JVM — Java Virtual Machine.

Groovy-код компілюється у bytecode, який виконується JVM.

Переваги:

  • Java ecosystem;
  • mature runtime;
  • garbage collection;
  • cross-platform;
  • tooling;
  • libraries;
  • enterprise compatibility;
  • Gradle/Maven;
  • monitoring tools.

Недолік: startup і runtime characteristics залежать від JVM, що може бути зайвим для дуже маленьких scripts.

Динамічна типізація

Groovy може бути динамічно типізованим.

Приклад:

def name = "Groovy"
def count = 10
def active = true

def означає: тип визначиться під час виконання або буде виведений компілятором залежно від контексту.

Динамічність зручна для:

  • scripts;
  • DSL;
  • швидкого прототипування;
  • тестів;
  • Jenkins pipelines;
  • automation.

Але динамічність може приховати помилки до runtime.

Статична перевірка типів

Groovy підтримує static type checking через @TypeChecked.

Приклад:

import groovy.transform.TypeChecked

@TypeChecked
class Calculator {
    int add(int a, int b) {
        a + b
    }
}

Це допомагає ловити помилки раніше.

Static compilation

Groovy підтримує @CompileStatic.

Приклад:

import groovy.transform.CompileStatic

@CompileStatic
class MathService {
    int square(int x) {
        x * x
    }
}

@CompileStatic може покращити performance і зробити поведінку ближчою до Java.

Офіційний GitHub repository Groovy описує мову як таку, що підтримує dynamic features, optional typing, duck typing, а також static compilation і static type checking на рівні Java або вище через extensible static type checker. [5]

Scripts

Groovy дуже зручний для scripts.

Файл:

hello.groovy

Код:

println "Hello from Groovy"

Запуск:

groovy hello.groovy

Scripts корисні для:

  • automation;
  • DevOps;
  • file processing;
  • data cleanup;
  • admin tasks;
  • quick reports;
  • calling Java APIs;
  • CI/CD helpers.

groovysh

groovysh — інтерактивний shell для Groovy.

Запуск:

groovysh

Groovy 5 release notes згадують revamped REPL groovysh на JLine 3 з покращеннями на кшталт syntax highlighting, history і completion. [6]

groovyConsole

groovyConsole — графічна консоль для запуску Groovy-коду.

Вона корисна для:

  • навчання;
  • швидкої перевірки коду;
  • scripts;
  • experiments;
  • роботи з snippets.

У production вона не замінює нормальний build/test workflow.

Синтаксис

Groovy синтаксично близький до Java, але коротший.

Приклад:

def numbers = [1, 2, 3, 4]

def doubled = numbers.collect { it * 2 }

println doubled

Тут:

  • def — оголошення змінної;
  • [1,2,3] — list literal;
  • { it * 2 } — closure;
  • collect — map-like operation.

Semicolons

У Groovy крапки з комою зазвичай не потрібні.

Можна писати:

println "Hello"
println "World"

Це робить scripts коротшими.

Strings

Groovy має кілька типів string literals.

Звичайний string:

def name = "Groovy"

String interpolation:

println "Hello, $name"

Multiline string:

def text = """
Line 1
Line 2
"""

GString — Groovy string із interpolation.

Closures

Closure — блок коду як значення.

Приклад:

def greet = { name ->
    "Hello, $name"
}

println greet("Anna")

Closures — одна з головних можливостей Groovy.

Вони використовуються в:

  • collections;
  • DSL;
  • Gradle;
  • Jenkins pipelines;
  • Spock tests;
  • callbacks;
  • builders.

it

Якщо closure має один параметр, Groovy може використовувати неявне ім’я it.

Приклад:

def numbers = [1, 2, 3]
def doubled = numbers.collect { it * 2 }

Це робить код коротким, але в складних closures краще явно називати параметри.

Collections

Groovy має зручні literals для списків і maps.

List:

def numbers = [1, 2, 3]

Map:

def user = [id: 1, name: "Anna", active: true]

Доступ:

println user.name
println user["name"]

Groovy collections дуже зручні для scripting і data transformations.

GDK

GDK — Groovy Development Kit.

Це набір extension methods до стандартних Java/JDK classes.

Наприклад, Groovy додає зручні методи для:

  • collections;
  • strings;
  • files;
  • streams;
  • dates;
  • XML;
  • JSON;
  • iterators.

Groovy 5 release notes зазначають, що Groovy має понад 2000 extension methods до 150+ JDK classes, а Groovy 5 додав 350 new methods. [7]

Files

Groovy спрощує роботу з файлами.

Приклад:

def file = new File("data.txt")

file.eachLine { line ->
    println line
}

Запис:

new File("out.txt").text = "Hello"

Це дуже зручно для scripts.

JSON

Groovy має зручні інструменти для JSON.

Приклад:

import groovy.json.JsonSlurper

def json = new JsonSlurper().parseText('{"name":"Anna","age":17}')

println json.name

Генерація JSON:

import groovy.json.JsonOutput

def data = [name: "Anna", active: true]
println JsonOutput.toJson(data)

JSON support корисний для API, automation і integration scripts.

XML

Groovy історично дуже сильний у роботі з XML.

Приклад:

def xml = new XmlSlurper().parseText("""
<root>
  <user name="Anna"/>
</root>
""")

println xml.user.@name

XML важливий для legacy enterprise systems, build tools, SOAP, configs і старих Java-проєктів.

Safe navigation operator

Groovy має safe navigation operator ?..

Приклад:

def city = user?.address?.city

Якщо user або address null, результат буде null, а не exception.

Це зручно, але може приховати проблеми, якщо null не очікувався.

Elvis operator

Elvis operator ?: задає fallback value.

Приклад:

def name = inputName ?: "Guest"

Якщо inputName false-like або null, буде використано "Guest".

Spread operator

Spread operator *. застосовує доступ до кожного елемента collection.

Приклад:

def names = users*.name

Це скорочує код для collection transformations.

Ranges

Groovy має ranges.

Приклад:

def numbers = 1..5
println numbers.toList()

Ranges зручні для loops, tests і DSL.

Operators

Groovy перевантажує багато operators через methods.

Наприклад:

a + b

може відповідати method call:

a.plus(b)

Groovy 5 додав @OperatorRename AST transform для operator overloading у third-party libraries. [8]

AST transforms

AST transform — механізм, який змінює або доповнює код на етапі компіляції.

Популярні annotation transforms:

  • @ToString;
  • @EqualsAndHashCode;
  • @TupleConstructor;
  • @Canonical;
  • @Immutable;
  • @CompileStatic;
  • @TypeChecked;
  • @Builder;
  • @Delegate;
  • @Slf4j.

Приклад:

import groovy.transform.Immutable

@Immutable
class Money {
    BigDecimal amount
    String currency
}

AST transforms зменшують boilerplate.

@Canonical

@Canonical додає типові methods і constructor.

Приклад:

import groovy.transform.Canonical

@Canonical
class Customer {
    Integer id
    String name
}

Це схоже на скорочення для типових data classes.

@Immutable

@Immutable допомагає створювати immutable classes.

Приклад:

import groovy.transform.Immutable

@Immutable
class Point {
    int x
    int y
}

Immutable objects корисні для thread safety і domain modeling.

@Grab і Grape

Grape дозволяє підвантажувати dependencies у scripts через @Grab.

Приклад:

@Grab('org.apache.commons:commons-lang3:3.14.0')
import org.apache.commons.lang3.StringUtils

println StringUtils.capitalize("groovy")

Це зручно для scripts, але в production build краще використовувати Gradle або Maven.

DSL

Groovy дуже сильний у створенні DSL — domain-specific languages.

DSL у Groovy можуть виглядати майже як конфігураційна мова.

Приклад ідеї:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
    }
}

DSL-можливості Groovy — одна з причин, чому він став основою Gradle DSL і Jenkins Pipeline.

Gradle

Gradle — build automation tool, який історично активно використовує Groovy DSL.

Приклад build.gradle:

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.spockframework:spock-core:2.4-M4-groovy-4.0'
}

Gradle також підтримує Kotlin DSL, але Groovy DSL досі дуже поширений.

Jenkins Pipeline

Jenkins Pipeline часто пишуть на Groovy-based DSL.

Файл:

Jenkinsfile

Приклад:

pipeline {
    agent any

    stages {
        stage('Test') {
            steps {
                sh 'echo Running tests'
            }
        }
    }
}

Groovy у Jenkins — один із найпоширеніших практичних сценаріїв.

Scripted Pipeline

Jenkins має scripted pipeline style:

node {
    stage('Build') {
        echo 'Building'
    }

    stage('Test') {
        echo 'Testing'
    }
}

Scripted Pipeline більш гнучкий, але може бути складнішим для підтримки.

Declarative Pipeline часто читабельніший для типових CI/CD задач.

Spock Framework

Spock — testing framework для Java і Groovy.

Spock відомий виразним DSL для тестів.

Приклад:

def "adding two numbers returns sum"() {
    expect:
    2 + 3 == 5
}

Spock підтримує:

  • specification style;
  • given/when/then;
  • data-driven testing;
  • mocking;
  • interaction testing;
  • expressive assertions.

Data-driven testing у Spock

Spock дуже зручний для табличних тестів.

Приклад:

def "max of two numbers"() {
    expect:
    Math.max(a, b) == result

    where:
    a | b || result
    1 | 2 || 2
    5 | 3 || 5
}

Це робить тестові cases читабельними.

Grails

Grails — web framework на Groovy.

Він побудований навколо ідей convention over configuration, GORM, plugins і продуктивної web-розробки на JVM.

Grails був дуже популярним як Groovy/Rails-like framework для JVM.

Сьогодні його використовують у частині legacy і active Groovy web projects, але mainstream web/backend частіше йде в Spring Boot, Java/Kotlin, Node.js, Go, C# або інші стеки.

Groovy і Spring

Groovy може працювати зі Spring ecosystem.

Сценарії:

  • Spring Boot apps;
  • configuration;
  • tests;
  • integration scripts;
  • dynamic beans historically;
  • Spock tests для Spring apps.

У сучасних Java/Spring командах Groovy часто зустрічається саме в тестах через Spock.

Metaprogramming

Groovy має сильні metaprogramming можливості.

Наприклад:

  • dynamic methods;
  • metaClass;
  • methodMissing;
  • propertyMissing;
  • AST transforms;
  • runtime modification;
  • DSL support.

Metaprogramming дуже потужний, але небезпечний для підтримки.

Обережно: metaprogramming може зробити код магічним. Якщо команда не розуміє, звідки взявся method або property, підтримка різко ускладнюється.

methodMissing і propertyMissing

Groovy дозволяє перехоплювати виклики невідомих methods/properties.

Це корисно для DSL.

Приклад ідеї:

def methodMissing(String name, args) {
    println "Unknown method: $name"
}

Але зловживання цим підходом робить код важким для IDE, static analysis і нових розробників.

Duck typing

Groovy може використовувати duck typing.

Ідея: якщо object має потрібний method, його можна викликати без явного interface.

Це зручно для scripts і DSL, але менш безпечно для великих production-систем.

Для великих кодових баз краще розглядати @TypeChecked або @CompileStatic.

Traits

Groovy підтримує traits.

Trait дозволяє описати reusable behavior.

Приклад:

trait Logger {
    void log(String message) {
        println message
    }
}

class Service implements Logger {
}

Traits корисні для композиції поведінки без класичного multiple inheritance.

Groovy і Kotlin

Groovy і Kotlin обидві JVM-мови, але мають різні цілі.

Мова Сильні сторони
Groovy scripting, DSL, Gradle/Jenkins, Spock, dynamic style, automation
Kotlin статична типізація, Android, backend, Kotlin DSL, modern JVM app development

Для нових production JVM apps часто обирають Kotlin або Java.

Для DSL, scripts, Jenkins і Spock Groovy залишається дуже практичним.

Groovy і Java

Порівняння:

Мова Особливість
Java стабільність, performance, enterprise ecosystem, static typing
Groovy коротший синтаксис, dynamic features, scripts, DSL, тестування

Groovy часто доповнює Java, а не замінює її.

Наприклад:

  • Java — production code;
  • Groovy/Spock — tests;
  • Groovy — Jenkinsfile;
  • Groovy DSL — Gradle build scripts.

Groovy і Scala

Scala має сильну type system і functional/OOP стиль.

Groovy більше орієнтований на productivity, scripting і dynamic/DSL сценарії.

Scala частіше використовують для складного backend або data frameworks.

Groovy частіше — для automation, testing і build DSL.

Groovy і Python

Groovy і Python схожі тим, що обидві мови зручні для scripts.

Але:

Мова Сильні сторони
Groovy JVM, Java libraries, Gradle/Jenkins, Spock, enterprise Java integration
Python data science, AI, scripting ecosystem, automation, simple deployment for scripts

Якщо потрібні Java libraries — Groovy зручний.

Якщо потрібна AI/data ecosystem — Python сильніший.

Groovy у DevOps

Groovy дуже поширений у DevOps через Jenkins Pipeline.

Сценарії:

  • Jenkinsfile;
  • build automation;
  • release scripts;
  • deployment logic;
  • Gradle builds;
  • internal automation;
  • integration tasks;
  • working with APIs;
  • file processing.

Groovy дає доступ до JVM і Java libraries, що корисно в enterprise CI/CD.

Groovy у тестуванні

Groovy дуже сильний у testing завдяки Spock.

Spock часто використовують для тестування Java-коду.

Переваги:

  • читабельний DSL;
  • given/when/then;
  • data tables;
  • mocks;
  • expressive assertions;
  • менше boilerplate;
  • інтеграція з JUnit Platform.

Для Java-команд Spock може бути головною причиною тримати Groovy в проєкті.

Groovy у бізнесі

Groovy корисний у бізнесі для:

  • Jenkins pipelines;
  • Gradle builds;
  • test automation;
  • internal scripts;
  • Java integration;
  • DSL для бізнес-правил;
  • data transformations;
  • quick admin tools;
  • legacy Grails apps;
  • integration scripts.

Groovy зазвичай не обирають як основну мову для нових великих backend-систем, але він часто є дуже корисним як “клей” навколо JVM-інфраструктури.

Groovy і ERP-системи

Groovy не є ERP-системою.

Він не веде облік, не проводить документи й не керує складом сам по собі.

У контексті K2 ERP Groovy може бути корисним опосередковано:

  • CI/CD pipelines;
  • Jenkins automation;
  • Gradle scripts;
  • тестування Java-компонентів через Spock;
  • integration scripts;
  • обробка JSON/XML;
  • внутрішні DSL для правил;
  • automation навколо JVM-сервісів;
  • підтримка legacy Grails/Java систем, які інтегруються з ERP.

Але додавати Groovy в ERP-архітектуру варто тільки там, де JVM/Groovy ecosystem уже справді використовується.

Groovy і API

Groovy може викликати REST API.

Приклад:

def url = new URL("https://api.example.com/items")
def text = url.text

println text

Для серйозних API-клієнтів краще використовувати HTTP libraries, error handling, retries, timeouts і logging.

У Groovy 6 release notes згадується новий groovy-http-builder module для HTTP-клієнтів, але Groovy 6 alpha releases не рекомендовані для production. [9]

Groovy і безпека

Groovy-код може бути дуже динамічним, тому безпека важлива.

Ризики:

  • запуск неперевірених scripts;
  • dynamic code execution;
  • unsafe Jenkins pipelines;
  • secrets у Jenkinsfile;
  • небезпечний metaprogramming;
  • dependency vulnerabilities;
  • небезпечна deserialization;
  • GroovyShell із user input;
  • sandbox bypass у CI/CD;
  • надмірні permissions для build agents.

Важливо: Groovy scripts у Jenkins або automation часто мають доступ до секретів, deployment keys і production-середовищ. Такий код треба review-ити як production-код.

Jenkins security

Jenkins Pipeline на Groovy потребує обережності.

Потрібно контролювати:

  • credentials;
  • script approval;
  • sandbox;
  • shared libraries;
  • permissions;
  • external commands;
  • secrets masking;
  • logs;
  • pull request builds;
  • third-party plugins.

Не можна бездумно виконувати Groovy-код із неперевірених pull requests.

GroovyShell

GroovyShell дозволяє виконувати Groovy-код динамічно.

Це корисно для:

  • scripting engines;
  • internal DSL;
  • admin consoles;
  • rule engines;
  • plugins.

Але виконання коду з user input може бути небезпечним.

Потрібні sandboxing, permissions і security review.

Продуктивність

Groovy зазвичай повільніший за Java в dynamic mode, бо має runtime dispatch і dynamic features.

Покращити performance можна через:

  • @CompileStatic;
  • Java interop;
  • правильні collections;
  • уникнення зайвого metaprogramming;
  • профілювання;
  • використання Java для hot paths.

Для scripts і build logic performance часто достатній.

Для high-performance backend краще оцінювати Java/Kotlin/Scala або статично скомпільований Groovy.

Підтримуваність

Groovy-код може бути дуже читабельним або дуже магічним.

Добре:

users.findAll { it.active }.collect { it.email }

Погано:

  • приховані methods;
  • runtime monkey patching;
  • складні DSL без документації;
  • methodMissing всюди;
  • неявні globals;
  • Jenkinsfile на тисячі рядків.

Потрібна дисципліна.

Коли Groovy особливо корисний

Groovy особливо корисний для:

  • Gradle scripts;
  • Jenkins pipelines;
  • Spock tests;
  • Java test automation;
  • JVM scripting;
  • DSL;
  • automation;
  • JSON/XML processing;
  • internal tools;
  • build logic;
  • CI/CD;
  • legacy Grails apps;
  • quick integration scripts.

Коли Groovy може бути невдалим вибором

Groovy може бути невдалим вибором, якщо:

  • потрібен новий high-performance backend;
  • команда не знає JVM;
  • потрібна максимальна статична типізація;
  • потрібен Android app;
  • потрібна AI/data science ecosystem;
  • потрібен простий portable script без JVM;
  • DSL буде занадто магічним;
  • Jenkinsfile перетворюється на application code;
  • production code важко review-ити через dynamic features.

Типові помилки в Groovy

Поширені помилки:

  • зловживати def у великому production-коді;
  • не використовувати @CompileStatic там, де потрібна надійність;
  • писати Jenkinsfile як велику програму без структури;
  • зберігати secrets у scripts;
  • виконувати неперевірений Groovy-код;
  • надмірно використовувати metaprogramming;
  • не документувати DSL;
  • плутати GString і String у Java interop;
  • не враховувати null;
  • покладатися на runtime помилки;
  • не тестувати build logic;
  • не фіксувати Groovy/JDK/Gradle versions.

Хороші практики

Під час роботи з Groovy варто:

  1. Фіксувати Groovy і JDK versions.
  2. Використовувати Groovy 5 для нових stable Groovy-проєктів.
  3. Для production code розглядати @TypeChecked або @CompileStatic.
  4. Використовувати Spock для тестів, де він справді покращує читабельність.
  5. Тримати Jenkinsfile коротким, логіку виносити в shared libraries.
  6. Не зберігати secrets у Groovy scripts.
  7. Обережно використовувати GroovyShell.
  8. Не створювати надмірно магічні DSL.
  9. Документувати DSL і metaprogramming.
  10. Перевіряти dependencies.
  11. Писати tests для build/automation logic.
  12. Не використовувати Groovy там, де Java/Kotlin будуть простішими для команди.
  13. У Gradle оцінювати Groovy DSL і Kotlin DSL залежно від команди.
  14. Не запускати неперевірений код у CI/CD.
  15. Профілювати performance перед оптимізацією.

Практичний висновок

Groovy — практична JVM-мова для scripting, DSL, build automation, Jenkins pipelines, Spock tests і Java integration.

Сильні сторони:

  • Java interoperability;
  • JVM ecosystem;
  • короткий синтаксис;
  • scripts;
  • closures;
  • collections;
  • GDK;
  • JSON/XML;
  • DSL;
  • Gradle;
  • Jenkins Pipeline;
  • Spock;
  • Grails;
  • AST transforms;
  • dynamic і static modes;
  • automation.

Обмеження:

  • dynamic code може давати runtime помилки;
  • performance нижчий за Java в dynamic mode;
  • metaprogramming може ускладнити підтримку;
  • Groovy менш популярний для нових backend-систем;
  • Jenkins Groovy має security-ризики;
  • потрібна JVM;
  • Kotlin/Java часто кращі для нових production JVM apps.

Groovy найкраще використовувати там, де потрібна гнучкість JVM: scripts, CI/CD, tests, DSL і automation. Для великих нових production-систем варто свідомо порівнювати Groovy з Java, Kotlin, Scala, Go, C# або Python.

Пояснення термінів

  • Groovy — мультипарадигмальна мова програмування для JVM.
  • Apache Groovy — офіційна назва проєкту Groovy в Apache Software Foundation.
  • JVM — Java Virtual Machine.
  • JDK — Java Development Kit.
  • Dynamic typing — типи перевіряються переважно під час виконання.
  • Static type checking — перевірка типів на етапі компіляції.
  • @TypeChecked — Groovy annotation для статичної перевірки типів.
  • @CompileStatic — Groovy annotation для статичної компіляції.
  • Closure — блок коду як значення.
  • GString — Groovy string із interpolation.
  • GDK — Groovy Development Kit, extension methods для JDK classes.
  • AST transform — compile-time трансформація коду.
  • DSL — domain-specific language.
  • Gradle — build automation tool із Groovy/Kotlin DSL.
  • Jenkins Pipeline — CI/CD pipeline DSL у Jenkins, часто на Groovy.
  • Jenkinsfile — файл опису Jenkins Pipeline.
  • Spock — testing framework для Java/Groovy.
  • Grails — web framework на Groovy.
  • GroovyShell — інструмент для динамічного виконання Groovy-коду.
  • Grape — dependency mechanism для Groovy scripts.
  • @Grab — annotation для підвантаження dependencies у scripts.
  • Trait — reusable behavior unit у Groovy.
  • methodMissing — hook для невідомих method calls.
  • propertyMissing — hook для невідомих properties.
  • Safe navigation — оператор ?. для null-safe access.
  • Elvis operator — оператор ?: для fallback value.
  • Spread operator — оператор *. для collection property/method access.

Дивіться також

Джерела