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

Groovy

Матеріал з K2 ERP Wiki

Groovy має змогу бути динамічно типізованим.;{{SEO


Якщо closure має один параметр, Groovy має змогу використовувати неявне ім’я it.; Це комфортно, але має змогу приховати проблеми, якщо null не очікувався.; # Не зберігати secrets у Groovy scripts.; # Не використовувати Groovy там, де Java/Kotlin будуть простішими для команди.; # Писати tests для build/automation logic.; Мова !!; Можна писати:


plugins {

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

@CompileStatic

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

Groovy спрощує роботу з файлами.;.; * Jenkins Pipeline — CI/CD pipeline DSL у Jenkins, часто на Groovy.; Це схоже на скорочення для типових data classes.; }

agent any

@Immutable

Groovy найкраще використовувати там, де потрібна гнучкість JVM: scripts, CI/CD, tests, DSL і automation.; }

Duck typing

== Статична перевірка типів ==
<pre>
Популярні annotation transforms:

}

}

Groovy підтримує роботу <code>@CompileStatic</code>.;<pre>

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

def name = inputName ?: "Guest"

int y

офіційно затверджений GitHub repository Groovy описує мову як таку, що підтримує роботу dynamic features, optional typing, duck typing, а додатково static compilation і static type checking на рівні Java або вище через extensible static type checker.; # Документувати DSL і metaprogramming.; * Dynamic typing — типи перевіряються переважно під час виконання.; void log(String message) { Jenkins Pipeline часто пишуть на Groovy-based DSL.; }

where:

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

У Groovy крапки з комою зазвичай не потрібні.; * Grails — web framework на Groovy.; Запис:

Jenkins Pipeline

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

@Canonical

Groovy у Jenkins — один із найпоширеніших практичних сценаріїв.; * AST transform — compile-time трансформація коду.; }

int square(int x) {
testImplementation 'org.spockframework:spock-core:2.4-M4-groovy-4.0'
}

Groovy дуже поширений у DevOps через Jenkins Pipeline.; Сьогодні його використовують у частині legacy і active Groovy web projects, але mainstream web/backend частіше йде в Spring Boot, Java/Kotlin, Node.js, Go, C# або інші стеки.; Groovy функціонує на JVM і дуже тісно інтегрується з Java.;== Дивіться додатково ==

x * x

Порівняння:

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

  • @ToString;
  • @EqualsAndHashCode;
  • @TupleConstructor;
  • @Canonical;
  • @Immutable;
  • @CompileStatic;
  • @TypeChecked;
  • @Builder;
  • @Delegate;
  • @Slf4j.; * Safe navigation — оператор ?.;== JSON ==

Ranges

Приклад:

Spock відомий виразним DSL для тестів.; * DSL — domain-specific language.; """

Головна ідея

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

GDK

Приклад:

Groovy і Kotlin

def numbers = [1, 2, 3]

Сценарії:

Strings

Groovy надає можливість:

Elvis operator

def numbers = 1..5

Groovy 5 додав @OperatorRename AST transform для operator overloading у third-party libraries.; * Jenkinsfile — файл опису Jenkins Pipeline.; має змогу відповідати method call:

}

Але виконання коду з user input має змогу бути небезпечним.; Приклад:

Grails

}

groovysh Сценарії: println text

Spread operator *.; Для великих нових production-систем варто свідомо порівнювати Groovy з Java, Kotlin, Scala, Go, C# або Python.; * dynamic methods;

  • metaClass;
  • methodMissing;
  • propertyMissing;
  • AST transforms;
  • runtime modification;
  • DSL support.;== Продуктивність ==

println greet("Anna") println user ["name"]

Groovy дуже сильний у testing завдяки наявності Spock.;
У Groovy 6 release notes згадується новий <code>groovy-http-builder</code> module для HTTP-клієнтів, але Groovy 6 alpha releases не рекомендовані для production.; Файл:
 echo 'Building...'
def names = users*.name

 mavenCentral()

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

echo 'Testing'

}

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

Groovy і безпека

як ілюстрація:

Groovy має сильні metaprogramming функціональні можливості.; GDK — Groovy Development Kit.;

<pre>

== Актуальна реліз ==
== groovysh ==
import groovy.transform.Immutable

== Static compilation ==

@Grab('org.apache.commons:commons-lang3:3.14.0')
'''Обережно:''' metaprogramming має змогу зробити код магічним.; Closures — одна з головних можливостей Groovy.;== Синтаксис ==

GString — Groovy string із interpolation.; Приклад:

dependencies {

a + b

import groovy.transform.Canonical

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

Groovy підтримує роботу static type checking через @TypeChecked.;== Gradle ==

@TypeChecked Groovy має зручні інструменти для JSON.;[1]

Це дуже комфортно для scripts.; String interpolation:


* Jenkinsfile;
* build automation;
* release scripts;
* deployment logic;
* Gradle builds;
* internal automation;
* integration tasks;
* working with APIs;
* file processing.; * '''GString''' — Groovy string із interpolation.; Groovy 5 release notes згадують revamped REPL <code>groovysh</code> на JLine 3 з покращеннями на кшталт syntax highlighting, history і completion.;<pre>
Groovy історично дуже сильний у роботі з XML.; * '''@CompileStatic''' — Groovy annotation для статичної компіляції.; # Не створювати надмірно магічні DSL.; Приклад:

[[Категорія:Java]]

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

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

Spock часто використовують для тестування Java-коду.; це мультипарадигмальна мова програмування; додатково реалізовано статичною перевіркою, closures, scripting, DSL-можливостями та глибокою інтеграцією з Java виступає ключовою рисою JVM, яка поєднує Java-подібний синтаксис із динамічною типізацією забезпечується через '''Groovy''' або '''Apache Groovy'''.; У production вона не замінює нормальний build/test workflow.; # Не запускати неперевірений код у CI/CD.;

Приклад:

""")

Grails — web framework на Groovy.;== Підтримуваність ==

steps {

істотно: Groovy scripts у Jenkins або automation часто мають доступ до секретів, deployment keys і production-середовищ.; Line 1

Приклад:

Потрібні sandboxing, permissions і security review.; def customer = new Customer(name: "Anna", age: 17)

  • зловживати def у великому production-коді;
  • не використовувати @CompileStatic там, де потрібна надійність;
  • писати Jenkinsfile як велику програму без структури;
  • зберігати secrets у scripts;
  • виконувати неперевірений Groovy-код;
  • надмірно використовувати metaprogramming;
  • не документувати DSL;
  • плутати GString і String у Java interop;
  • не враховувати null;
  • покладатися на runtime помилки;
  • не тестувати build logic;
  • не фіксувати Groovy/JDK/Gradle versions.; застосовує доступ до кожного елемента collection.; # Тримати Jenkinsfile коротким, логіку виносити в shared libraries.; * Trait — reusable behavior unit у Groovy.; як ілюстрація:
  1. Фіксувати Groovy і JDK versions.; a | b || result

Коли Groovy має змогу бути невдалим вибором

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

  • automation;
  • DevOps;
  • file processing;
  • data cleanup;
  • admin tasks;
  • quick reports;
  • calling Java APIs;
  • CI/CD helpers.; * Static type checking — перевірка типів на етапі компіляції.; JVM — Java Virtual Machine.; Groovy має змогу бути невдалим вибором, якщо:

Це означає:

Multiline string:

1 | 2 || 2

Обмеження:

Тут:

}
 5 | 3 || 5
== Коли Groovy особливо корисний ==

Це робить scripts коротшими.; Groovy синтаксично близький до Java, але коротший.; Groovy дає доступ до JVM і Java libraries, що корисно в enterprise CI/CD.; # Обережно використовувати GroovyShell.;<div style="background:#f6ffed;border-left:6px solid #27ae60;padding:14px 18px;margin:16px 0;border-radius:8px;">
== Closures ==
<pre>

Це комфортно для scripts і DSL, але менш безпечно для великих production-систем.;<ref>https://groovy-lang.org/releasenotes/groovy-5.0.html</ref>

Приклад Java-подібного Groovy-коду:
Не можна бездумно виконувати Groovy-код із неперевірених pull requests.;[[Категорія:Gradle]]

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

* '''Groovy''' — мультипарадигмальна мова програмування для JVM.; '''groovysh''' — інтерактивний shell для Groovy.;<pre>

 sh 'echo Running tests'

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

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

  • collections;
  • DSL;
  • Gradle;
  • Jenkins pipelines;
  • Spock tests;
  • callbacks;
  • builders.; Сильні сторони

file.eachLine { line ->

it

Це скорочує код для collection transformations.; {| class="wikitable"

Groovy має safe navigation operator ?.; a + b

class Calculator {

def name = "Groovy"

methodMissing і propertyMissing

class Customer {

<user name="Anna"/>
stages {
stages {

AST transforms зменшують boilerplate.; * Java ecosystem;

  • mature runtime;
  • garbage collection;
  • cross-platform;
  • tooling;
  • libraries;
  • enterprise compatibility;
  • Gradle/Maven;
  • monitoring tools.;
!; * '''@Grab''' — annotation для підвантаження dependencies у scripts.;

def city = user?.address?.city AST transform — механізм, який змінює або доповнює код на етапі компіляції.; Groovy — практична JVM-мова для scripting, DSL, build automation, Jenkins pipelines, Spock tests і Java integration.;== Scripted Pipeline ==

Для scripts і build logic performance часто достатній.; Він не веде обліковий облік, не проводить документи й не керує складом сам по собі.; * писати scripts на JVM;

  • використовувати Java libraries;
  • створювати DSL;
  • зменшувати boilerplate;
  • писати expressive tests;
  • автоматизувати CI/CD;
  • будувати Gradle scripts;
  • працювати з JSON/XML коротко;
  • обирати dynamic або static style;
  • інтегруватися з існуючим Java-кодом.; * scripts;
  • DSL;
  • швидкого прототипування;
  • тестів;
  • Jenkins pipelines;
  • automation.; * Spring Boot apps;
  • configuration;
  • tests;
  • integration scripts;
  • dynamic beans historically;
  • Spock tests для Spring apps.;
* навчання; * швидкої перевірки коду; * scripts; * experiments; * роботи з snippets.;
Головна ідея Groovy — зробити JVM-розробку гнучкішою, коротшою й зручнішою, не відриваючись від Java ecosystem.; !; Groovy більше орієнтований на productivity, scripting і dynamic/DSL сценарії.; '''Проста аналогія:''' Java — це строгий офісний костюм.; Сильні сторони
== Safe navigation operator ==
 stage('Build') {
</root>

class Service implements Logger {

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

Погано:

println "World"

<pre>
Офіційна документація Groovy показує версію '''5.0.5''' серед доступних актуальних documentation versions.; * '''GroovyShell''' — інструмент для динамічного виконання Groovy-коду.; int add(int a, int b) {

XML важливий для legacy enterprise systems, build tools, SOAP, configs і старих Java-проєктів.; '''GroovyShell''' надає можливість виконувати Groovy-код динамічно.;

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

AST transforms

Він побудований навколо ідей convention over configuration, GORM, plugins і продуктивної web-розробки на JVM.; Якщо inputName false-like або null, буде використано "Guest".; Приклад: Immutable objects корисні для thread safety і domain modeling.; Elvis operator ?: задає fallback value.;== Spock Framework ==

== Jenkins security ==

Приклад:
== XML ==
println json.name
<pre>
Недолік: startup і runtime characteristics залежать від JVM, що має змогу бути зайвим для дуже маленьких scripts.; # Використовувати Groovy 5 для нових stable Groovy-проєктів.;<ref>https://groovy-lang.org/releasenotes/groovy-6.0.html</ref>
<pre>
[[Категорія:Програмування]]

println customer.name

</div>

<pre>

== Groovy у бізнесі ==

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

Для high-performance backend краще оцінювати Java/Kotlin/Scala або статично скомпільований Groovy.; Це робить код коротким, але в складних closures краще явно називати параметри.;== groovyConsole ==
== Groovy і Scala ==
<pre>

Звичайний string:

DSL-можливості Groovy — одна з причин, чому він став основою Gradle DSL і Jenkins Pipeline.; {| class="wikitable"
 steps {
 stage('Test') {

 println message

List:
Groovy не є собою ERP-системою.;== Groovy і ERP-системи ==

  • 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 || scripting, DSL, Gradle/Jenkins, Spock, dynamic style, automation |- | Kotlin || статична типізація, Android, backend, Kotlin DSL, modern JVM app development |}

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

class Point {

Collections


def active = true
<code>def</code> означає: тип визначиться під час виконання або буде виведений компілятором залежно від контексту.;<ref>https://groovy-lang.org/documentation.html</ref>
 }
[[Категорія:Automation]]

== Динамічна типізація ==
[[Категорія:Testing]]

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

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

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

Якщо потрібні Java libraries — Groovy зручний.; def count = 10 def "adding two numbers returns sum"() { Покращити performance можна через: Grails був дуже популярним як Groovy/Rails-like framework для JVM.;[2] @Canonical Приклад:

Ranges зручні для loops, tests і DSL.;
Changelog Apache Groovy додатково показує активні релізи гілок Groovy 5.0.x і 4.0.x у 2026 році, зокрема Groovy 4.0.32 від 4 травня 2026 року.;

Groovy має змогу працювати зі Spring ecosystem.; * GDK — Groovy Development Kit, extension methods для JDK classes.;[3] def numbers = [1, 2, 3] }

BigDecimal amount

переважні аспекти:

== Groovy і Java ==

як ілюстрація:
 println "Unknown method: $name"
== Groovy у DevOps ==
Це корисно для DSL.; class Money {

import org.apache.commons.lang3.StringUtils

Файл:

Код:
 String name
Scripted Pipeline більш гнучкий, але має змогу бути складнішим для підтримки.;== Хороші практики ==
Приклад:

println numbers.toList()

expect:

println doubled

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

* [[Java]]
* [[Kotlin]]
* [[Scala]]
* [[C Sharp]]
* [[Go]]
* [[Python]]
* [[PowerShell]]
* [[F Sharp]]
* [[Erlang]]
* [[Haskell]]
* [[Розробка в K2 ERP]]
* [[Тестування коду]]
* [[API K2 ERP]]
* [[Інтеграції K2 ERP]]
* [[GitHub Copilot]]
* [[Cursor]]
* [[Tabnine]]
* [[Штучний інтелект]]
* [[Генеративний AI]]

hello.groovy

* [https://groovy-lang.org/ Apache Groovy — офіційна сторінка]
* [https://groovy.apache.org/download.html Apache Groovy — Download]
* [https://groovy-lang.org/documentation.html Apache Groovy — Documentation]
* [https://docs.groovy-lang.org/ Apache Groovy Documentation]
* [https://groovy-lang.org/changelogs.html Apache Groovy — Changelogs]
* [https://groovy-lang.org/releasenotes/groovy-5.0.html Apache Groovy — Release notes for Groovy 5.0]
* [https://groovy-lang.org/releasenotes/groovy-6.0.html Apache Groovy — Release notes for Groovy 6.0]
* [https://groovy-lang.org/install.html Apache Groovy — Install Groovy]
* [https://github.com/apache/groovy Apache Groovy GitHub Repository]
* [https://spockframework.org/ Spock Framework]
* [https://gradle.org/ Gradle]
* [https://www.jenkins.io/doc/book/pipeline/ Jenkins Pipeline Documentation]
* [https://grails.org/ Grails]
* [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki — Help:Formatting]
* [https://www.mediawiki.org/wiki/Help:Links MediaWiki — Help:Links]

Для нових production JVM apps часто обирають Kotlin або Java.; Groovy-код має змогу бути дуже динамічним, з цієї причини безпека важлива.; Groovy — це той самий офіс, але без краватки: JVM лишається, Java libraries лишаються, але писати можна швидше й вільніше.;<pre>
Declarative Pipeline часто читабельніший для типових CI/CD задач.; '''Для документації:''' у Groovy-проєктах істотно вказувати не тільки Groovy version, а й JDK version.;
Integer id

Це набір extension methods до стандартних Java/JDK classes.; Groovy має змогу використовувати duck typing.; * dynamic code має змогу давати runtime помилки;

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

Files

class Customer {

Groovy і Spring

Поширені помилки: Groovy має кілька типів string literals.; * JDK — Java Development Kit.;== Джерела ==

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

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

Trait надає можливість описати reusable behavior.;
для null-safe access.; Коротко: Groovy — це “Java без зайвої церемонності”: коротший синтаксис, scripts, closures, DSL і доступ до всієї JVM-екосистеми.; # Для production code розглядати @TypeChecked або @CompileStatic.;

Приклад:
println user.name
== Groovy і Python ==
 }
Scala має сильну type system і functional/OOP стиль.; '''Closure''' — блок коду як значення.;<pre>

println "Hello, $name"

<pre>

Groovy 5 release notes зазначають, що Groovy має понад 2000 extension methods до 150+ JDK classes, а Groovy 5 додав 350 new methods.; Groovy перевантажує багато operators через methods.; agent any

 println line
Доступ:
}
groovy hello.groovy

 }

Приклад:


<pre>

'''Grape''' надає можливість підвантажувати dependencies у scripts через <code>@Grab</code>.; Якщо команда не розуміє, звідки взявся method або property, супровід різко ускладнюється.;</code> для collection property/method access.; !; * '''propertyMissing''' — hook для невідомих properties.;<pre>

[[Категорія:Jenkins]]

Для Java-команд Spock має змогу бути головною причиною тримати Groovy в проєкті.; * Java interoperability;
* JVM ecosystem;
* короткий синтаксис;
* scripts;
* closures;
* collections;
* GDK;
* JSON/XML;
* DSL;
* Gradle;
* Jenkins Pipeline;
* Spock;
* Grails;
* AST transforms;
* dynamic і static modes;
* automation.; @Immutable
<div style="background:#fff0f0;border-left:6px solid #eb5757;padding:14px 18px;margin:16px 0;border-radius:8px;">
println JsonOutput.toJson(data)

завдяки наявності <code>@Immutable</code>користувачі можуть створювати immutable classes.; * '''JVM''' — Java Virtual Machine.;<ref>https://groovy-lang.org/releasenotes/groovy-5.0.html</ref>

import groovy.transform.Immutable

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

}

pipeline {

<code>@Canonical</code> додає типові methods і constructor.; Генерація JSON:
Але динамічність має змогу приховати помилки до runtime.; Його часто люблять не за теорію, а за практичність в automation, build tools і тестуванні.; Приклад ідеї:

Але:
== Пояснення термінів ==

Groovy має зручні literals для списків і maps.; Gradle додатково підтримує роботу Kotlin DSL, але Groovy DSL досі дуже поширений.; * читабельний DSL;

  • given/when/then;
  • data tables;
  • mocks;
  • expressive assertions;
  • менше boilerplate;
  • інтеграційні функціональні можливості з JUnit Platform.;[4]

Groovy зазвичай повільніший за Java в dynamic mode, бо має runtime dispatch і dynamic features.; * Elvis operator — оператор ?: для fallback value.; Приклад build.gradle:

trait Logger {

Ризики:

def methodMissing(String name, args) {

"Hello, $name"

Приклад:

echo 'Building'

def data = [name: "Anna", active: true]

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

stage('Build') {

Spread operator

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

Groovy і Java


<pre>

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

{| class="wikitable"

<root>
Traits корисні для композиції поведінки без класичного multiple inheritance.; Сильні сторони:
def name = "Groovy"
<pre>
<pre>

== @Immutable ==

 stage('Test') {

repositories {

<div style="background:#eef6ff;border-left:6px solid #2f80ed;padding:14px 18px;margin:16px 0;border-radius:8px;">

}

println "Hello"

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
Це сприяє ловити помилки раніше.; * '''methodMissing''' — hook для невідомих method calls.; * <code>def</code> — оголошення змінної;
* <code>[1,2,3]</code> — list literal;
* <code>{ it * 2 }</code> — closure;
* <code>collect</code> — map-like operation.;

println xml.user.@name

Приклад:


Map:

<div style="background:#fff0f0;border-left:6px solid #eb5757;padding:14px 18px;margin:16px 0;border-radius:8px;">
Приклад:
|-
| '''Groovy''' || JVM, Java libraries, Gradle/Jenkins, Spock, enterprise Java integration
|-
| '''Python''' || data science, AI, scripting ecosystem, automation, simple deployment for scripts
|}

def doubled = numbers.collect { it * 2 }

</div>

Це комфортно для scripts, але в production build краще використовувати Gradle або Maven.; Приклад:
def text = url.text

== Metaprogramming ==

Запуск:

def doubled = numbers.collect { it * 2 }

@CompileStatic має змогу покращити performance і зробити поведінку ближчою до Java.; * Apache Groovy — офіційна назва проєкту Groovy в Apache Software Foundation.;== GroovyShell ==

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

import groovy.transform.TypeChecked

Groovy і Kotlin обидві JVM-мови, але мають різні цілі.; Станом на травень 2026 року офіційна сторінка Apache Groovy Download зазначає, що Groovy 5.0 є собою latest stable version, designed for JDK11+.;

Приклад:

Groovy collections дуже зручні для scripting і data transformations.; # Використовувати Spock для тестів, де він справді покращує читабельність.;
Динамічність зручна для:
Jenkins має scripted pipeline style:

<pre>

Groovy-код має змогу бути дуже читабельним або дуже магічним.; Для серйозних API-клієнтів краще використовувати HTTP libraries, error handling, retries, timeouts і logging.; * '''Grape''' — dependency mechanism для Groovy scripts.; }

 int x

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

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

Якщо user або address null, результат буде null, а не exception.; # У Gradle оцінювати Groovy DSL і Kotlin DSL залежно від команди.; println "Hello from Groovy"

println StringUtils.capitalize("groovy")

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

<pre>

}

Groovy підтримує роботу traits.; def xml = new XmlSlurper().parseText(""" Але додавати Groovy в ERP-архітектуру варто тільки там, де JVM/Groovy ecosystem уже справді застосовується.; Groovy дуже сильний у створенні DSL — domain-specific languages.; }

id 'java'
Integer age

}

pipeline {

Ідея: якщо object має потрібний method, його можна викликати без явного interface.; У сучасних Java/Spring командах Groovy часто зустрічається саме в тестах через Spock.; String name

}

@Grab і Grape

Запуск:
переважні аспекти:
Офіційна сторінка Apache Groovy описує Groovy як multi-faceted language for the JVM із Java-like syntax, productivity features, OO і functional paradigms, static and dynamic natures, scripts і DSL.;<ref>https://github.com/apache/groovy</ref>
Якщо потрібна AI/data ecosystem — Python сильніший.; * '''Spock''' — testing framework для Java/Groovy.; Groovy зменшує boilerplate, але лишається близьким до Java.; Такий код треба review-ити як production-код.; JSON support корисний для API, automation і integration scripts.; DSL у Groovy можуть виглядати майже як конфігураційна мова.; Groovy має ranges.; def text = """

* credentials;
* script approval;
* sandbox;
* shared libraries;
* permissions;
* external commands;
* secrets masking;
* logs;
* pull request builds;
* third-party plugins.; Мова !!;</div>
}

Groovy частіше — для automation, testing і build DSL.; додатково вказано, що '''Groovy 6.0''' — next major version для JDK17+, але alpha releases не рекомендовані для production.; * '''Spread operator''' — оператор <code>*.; * потрібен новий high-performance backend;
* команда не знає JVM;
* потрібна максимальна статична типізація;
* потрібен Android app;
* потрібна AI/data science ecosystem;
* потрібен простий portable script без JVM;
* DSL буде занадто магічним;
* Jenkinsfile перетворюється на application code;
* production code важко review-ити через dynamic features.;== Groovy і API ==

def greet = { name ->

node {

== Operators ==

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

</div>

* collections;
* strings;
* files;
* streams;
* dates;
* XML;
* JSON;
* iterators.; # Профілювати performance перед оптимізацією.; Мова !!; Groovy 5 орієнтований на JDK 11+, а Groovy 6 — на JDK 17+.;<pre>

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

== Semicolons ==

== JVM ==

class MathService {

* scripting engines;
* internal DSL;
* admin consoles;
* rule engines;
* plugins.; |-
| '''Java''' || стабільність, performance, enterprise ecosystem, static typing
|-
| '''Groovy''' || коротший синтаксис, dynamic features, scripts, DSL, тестування
|}

== DSL ==

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

* Java — production code;
* Groovy/Spock — tests;
* Groovy — Jenkinsfile;
* Groovy DSL — Gradle build scripts.; Groovy надає можливість перехоплювати виклики невідомих methods/properties.; Jenkins Pipeline на Groovy потребує обережності.; '''Spock''' — testing framework для Java і Groovy.; * Jenkins pipelines;
* Gradle builds;
* test automation;
* internal scripts;
* Java integration;
* DSL для бізнес-правил;
* data transformations;
* quick admin tools;
* legacy Grails apps;
* integration scripts.; * '''Closure''' — блок коду як значення.; * '''Gradle''' — build automation tool із Groovy/Kotlin DSL.; * '''@TypeChecked''' — Groovy annotation для статичної перевірки типів.; Groovy має змогу викликати REST API.; # Перевіряти dependencies.; Groovy дуже зручний для scripts.;

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