Groovy Vodič za skripte za početnike

⚡ Pametni sažetak

Groovy Skripta je objektno orijentirani jezik za Java platforma koja se kompajlira u JVM bajtkod. Dodaje dinamički typing, zatvaranja i koncizna sintaksa za Javai to omogućuje Jenkins cjevovodi, Gradle gradi i SoapUI tvrdnje.

  • 🧩 Java kompatibilan: Najvažnije Java kod se kompajlira nepromijenjen u Groovy, tako da troškovi učenja ostaju vrlo niski.
  • Less standardni tekst: Jedan redak println zamjenjuje klasu, glavnu metodu i poziv System.out Java zahtjevi.
  • 🔀 Dinamički typing: Ključna riječ def omogućuje jednoj varijabli da sadrži cijeli broj, a zatim niz znakova tijekom izvođenja.
  • 🔁 Kompaktne petlje: Metode upto, times i step zamjenjuju opširne C-stilske for petlje u jednom retku.
  • ???? Izvorne kolekcije: Liste i mape imaju doslovnu sintaksu plus pomoćne funkcije kao što su pop, keySet i sort.
  • 🧠 Zatvaranja: Blokovi koda djeluju kao objekti, prihvaćaju parametre, vraćaju vrijednosti i ugnijezde se unutar drugih zatvarača.
  • Tri alata: groovysh pruža ljusku, groovyConsole pruža grafičko korisničko sučelje (GUI), a groovy izravno pokreće skriptne datoteke.

Groovy Vodič za skripte za početnike

Što je a Groovy Skripta?

apaš Groovy je objektno orijentiran, Java sintaksno kompatibilan programski jezik izgrađen za Java platforma. Ovaj dinamički jezik ima mnoge značajke koje su slične Python, Ruby, Smalltalk i Perl. Groovy izvorni kod se kompilira u Java bajtkod, tako da radi na bilo kojoj platformi gdje je Java Virtualni stroj je instaliran. Groovy također obavlja puno posla iza kulisa, što ga čini agilnijim i dinamičnijim od običnog Java.

A Groovy rukopis jednostavno je .groovy datoteka koja sadrži izjave koje Groovy obavija generiranu klasu prije pokretanja. Zato možete izvršiti datoteku od jednog retka bez pisanja klase ili main metoda. Groovy stoga se može koristiti kao skriptni jezik za Java platformu, a istovremeno nudi poslovne mogućnosti JavaDodaje značajke produktivnosti kao što su DSL podrška, zatvaranja i opcionalni dinamički typingZa razliku od nekih drugih jezika, osmišljen je kao dodatak Java, a ne zamjena za to.

💡 Savjet: Groovy 5.0 je trenutna stabilna verzija i namijenjena je JDK 11 i novijim verzijama. Groovy 4.0 ostaje dostupan za JDK 8 projekte i Groovy Verzija 6.0 je još uvijek u alfa fazi za JDK 17. Uvijek provjerite tablicu sistemskih zahtjeva na službenoj stranici za preuzimanje prije nego što odaberete verziju.

Zašto Groovy?

Evo glavnih razloga zašto biste trebali koristiti i učiti Groovy:

  • Groovy je agilan i dinamičan jezik.
  • Besprijekorno se integrira sa svim postojećim Java objekti i knjižnice.
  • Osjeća se lako i prirodno Java programeri.
  • Kod je sažetiji i smisleniji od ekvivalenta Java kodirati.
  • Možete ga koristiti unutra koliko god želite. Java aplikacija.
  • Radi na standardu Java Virtualni stroj, tako da nije potrebno zasebno okruženje za izvođenje.

Groovy Povijest

  • 2003: Započeo James S.tracHan i Bob McWhirter.
  • 2004: Poslano Java Proces zajednice kao JSR 241, koji je kasnije povučen.
  • 2005: Vraćeno track od Jeremyja Raynera i Guillaumea Laforgea.
  • 2007: Groovy Objavljena je verzija 1.0.
  • 2012: Groovy Objavljena je verzija 2.0.
  • 2014: Groovy 2.3 objavljena sa službenom podrškom za JDK 8.
  • 2015: Groovy postao je vrhunski projekt u Apache Softwareu Foundation.
  • 2022: Groovy Objavljena je verzija 4.0, s pomicanjem Mavenovih koordinata na org.apache.groovy.
  • 2025: Groovy 5.0 objavljena za JDK 11 i novije verzije.

Značajke Groovy

  • Literali liste, mape, raspona i regularnih izraza.
  • Više metoda (isporuka metoda tijekom izvođenja) i metaprogramiranje.
  • Groovy klase i skripte se obično pohranjuju u .groovy slika.
  • Skripte sadrže Groovy izjave bez ikakve deklaracije klase.
  • Skripte također mogu sadržavati definicije metoda izvan definicija klasa.
  • Groovy kod se može kompajlirati i potpuno integrirati s tradicionalnim Java prijava.
  • Podrška na razini jezika za mape, popise i regularne izraze.
  • Podrška za zatvaranja, dinamički typingi protokol meta-objekta.
  • Podrška za statičku i dinamičku tping, plus preopterećenje operatora.
  • Opcionalna statička provjera tipa putem @TypeChecked i @CompileStatic primjedbe.

Kako instalirati Groovy

Korak 1) Osigurajte da imate Java instaliran.

Korak 2) Idi na https://groovy.apache.org/download.html I kliknite na Windows poveznica za instalaciju.

Groovy stranica za preuzimanje s vezom za instalaciju

Napomena: možete također instalirati Groovy iz binarne Zip datoteke, putem upravitelja paketa kao što su SDKMAN!, Homebrew, Scoop ili Chocolatey ili kao dodatak za vaš Java IDE. U ovom Groovy vodiča, držat ćemo se Windows instalater.

Korak 3) Pokrenite preuzeti instalacijski program. Odaberite jezik i kliknite U redu.

Groovy dijalog za odabir jezika instalacijskog programa

Korak 4) Na početnom zaslonu kliknite DALJE.

Groovy zaslon dobrodošlice za instalaciju

Korak 5) Slažem se s uvjetima licence.

Groovy zaslon s ugovorom o licenci za instalaciju

Korak 6) Odaberite komponente koje želite instalirati i kliknite DALJE.

Groovy zaslon za odabir komponenti instalacijskog programa

Korak 7) Odaberite instalacijski direktorij i kliknite DALJE.

Groovy zaslon instalacijskog direktorija za instalaciju programa

Korak 8) Odaberite mapu izbornika Start i kliknite DALJE.

Groovy zaslon mape Start izbornika instalacijskog programa

Korak 9) Nakon što je instalacija završena, ostavite putanje po zadanim vrijednostima i kliknite DALJE.

Groovy zaslon putanje instalacijskog okruženja

Korak 10) Potvrdite opcije povezivanja datoteka i kliknite DALJE.

Groovy zaslon za povezivanje datoteka instalacijskog programa

Korak 11) U izborniku Start potražite Groovy Konzola za potvrdu instalacije.

Pretraživanje izbornika Start koje prikazuje Groovy Prečac konzole

⚠️ Upozorenje: The Windows Instalacijski program je artefakt zajednice, a ne službeno izdanje Apachea. Ako vaša organizacija zahtijeva potpisana Apache preuzimanja, upotrijebite binarnu Zip distribuciju i provjerite njezinu .asc potpis i .sha256 kontrolni zbroj umjesto toga.

Groovy Hello World Primjer

Pretpostavimo da želite ispisati jednostavan niz znakova „Pozdrav svijete“ u JavaKod bi izgledao ovako.

public class Demo {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

Izlaz:

Hello World

Gornji kod je valjan u oba Java i Groovy, Jer je Groovy prihvaća gotovo sve Java sintaksa. Prednost s Groovy jest da možete izostaviti deklaraciju klase, javnu metodu i potpuno kvalificirani poziv metode print te postići isti izlaz s jednom linijom.

println "Hello World"

Izlaz:

Hello World
  • Nema potrebe za točkom-zarezom.
  • Nema potrebe za nastavom ili main metoda.
  • System.out.println svodi se na println.

Groovy Varijable

In Java, statičko vezanje je obavezno, što znači da tip varijable mora biti unaprijed deklariran.

public class Demo {
    public static void main(String[] args) {
        int x = 104;
        System.out.println(x);
        //x = "Guru99";
    }
}

Izlaz:

104

U gornjem primjeru, tip varijable je unaprijed deklariran pomoću ključne riječi intAko biste deklarirali broj s pomičnim zarezom, koristili biste ključnu riječ float or double.

Ako pokušate dodijeliti vrijednost tipa String nečemu int (odkomentirajte redak 5), dobit ćete sljedeću grešku pri kompajliranju.

Demo.java:5: error: incompatible types: String cannot be converted to int
x = "Guru99";

U suprotnosti, Groovy podržava dinamički typingVarijable se definiraju pomoću ključne riječi def, a tip ne treba unaprijed deklarirati. Runtime određuje tip varijable, a taj tip možete čak i kasnije promijeniti.

def x = 104
println x.getClass()
x = "Guru99"
println x.getClass()

Izlaz:

class java.lang.Integer
class java.lang.String

In Groovy Također možete stvoriti višelinijske nizove. Samo pazite da niz stavite u trostruke navodnike.

def x = """Groovy
at
Guru99"""
println x

Izlaz:

Groovy
at
Guru99

Bilješka: I dalje možete koristiti eksplicitne tipove kao što su byte, short, inti long in GroovyAli nakon što eksplicitno deklarirate tip, ne možete ga dinamički mijenjati.

int x = 104
println x
x = "Guru99"

Izlaz:

104
Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Guru99' with class 'java.lang.String' to class 'int'
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Guru99' with class 'java.lang.String' to class 'int'
    at jdoodle.run(jdoodle.groovy:3)
Command exited with non-zero status 1

Groovy Operaulagatelji

Operator je simbol koji kompajleru govori da izvrši određenu matematičku ili logičku manipulaciju. Groovy podržava sljedećih pet obitelji operatora.

  • Aritmetički operatori: dodaj (+), podmenitract (-), množenje (*), dijeljenje (/), modul (%), povećanje (++), smanjenje (–).
  • Relacijski operatori: jednako (==), nije jednako (!=), manje od (<), manje ili jednako (<=), veće od (>), veće ili jednako (>=).
  • Logički operatori: i (&&) ili (||), ne (!).
  • Bitovi operatori: i (&), ili (|), isključivo ili (^), komplement (~).
  • Operatori dodjele: dodijelite (=) i složene oblike (+=), (-=), (*=), (/=), (%=).

Groovy dodaje nekoliko operatora koji Java nema, i uklanjaju puno standardnih null-check obrazaca.

Operahumka Description
?. Sigurna navigacija. Vraća null umjesto izbacivanja NullPointerException kada je lijeva strana null.
?: Elvisov operator. Vraća lijevu stranu ako je istinita, inače desnu stranu.
<=> Operator svemirskog broda. Delegati za compareTo i korisni su unutar zatvaranja sortiranja.
==~ Podudaranje regularnih izraza. Vraća vrijednost true samo kada cijeli niz odgovara uzorku.

Groovy petlje

In Java, definirali biste petlju brojanja na sljedeći način.

public class Demo {
    public static void main(String[] args) {
        for (int x = 0; x <= 5; x++) {
            System.out.println(x);
        }
    }
}

Izlaz:

0
1
2
3
4
5

Isti rezultat možete postići u Groovy s upto metoda koja uključuje obje granice.

0.upto(5) { println "$it" }

Izlaz:

0
1
2
3
4
5

Ovdje it je implicitni parametar zatvaranja i sadrži vrijednost trenutne iteracije. Razmotrimo sljedeći kod.

2.upto(4) { println "$it" }

Izlaz:

2
3
4

Također možete koristiti times metoda. Uvijek počinje od 0 i zaustavlja se za jedan broj prije broja na kojem je pozivate, tako da vam je potrebno 6 za ispis od 0 do 5.

6.times { println "$it" }

Izlaz:

0
1
2
3
4
5

Sada pretpostavimo da želite ispisati 0, 2 i 4 s Java za petlju.

public class Demo {
    public static void main(String[] args) {
        for (int x = 0; x <= 5; x=x+2) {
            System.out.println(x);
        }
    }
}

Izlaz:

0
2
4

Možete koristiti step metoda za isti rezultat. Drugi argument je prirast, a prvi argument je isključiva gornja granica.

0.step(5, 2) { println "$it" }

Izlaz:

0
2
4

Groovy Odlučivanje

Groovy ponovno koristi Java uvjetne naredbe i dodaje daleko fleksibilnije switchDonja tablica sažima opcije.

Izjava Description
ako izjava Kao u Java, tijelo if naredbe se izvršava kada je uvjet istinit.
naredba if/else Uvjet u if naredbi se prvo procjenjuje. Ako je istinit, naredbe u if bloku se izvršavaju, a else blok se preskače. Ako je neistinit, umjesto njih se izvršavaju naredbe u else bloku.
Ugniježđena if naredba Koristi se kada je potrebno testirati dodatni uvjet unutar if bloka.
izjava prebaciti Ugniježđeni if-else lanac postaje nečitljiv kada imate mnogo uvjeta. Naredba switch olakšava čitanje iste logike. U Groovy, oznaka slučaja može biti vrijednost, klasa, raspon, regularni izraz ili zatvarač.
Ugniježđena naredba switch Groovy također omogućuje postavljanje jedne naredbe switch unutar druge.

Groovy Popis

Struktura liste omogućuje vam pohranjivanje kolekcije podatkovnih stavki. U GroovyLista sadrži niz referenci objekata i čuva poziciju svakog elementa u tom nizu. Literal liste piše se kao niz objekata odvojenih zarezima i zatvorenih u uglate zagrade.

Primjeri Groovy popisi:

  • Popis nizova: ['Angular', 'Nodejs']
  • Popis referenci miješanih objekata: ['Groovy', 2, 4, 2.6]
  • Popis cijelih brojeva: [16, 17, 18, 19]
  • Prazna lista: []

Sljedeće metode popisa dostupne su u Groovy.

način Description
dodati() Dodaje novu vrijednost na kraj liste.
sadrži () Vraća vrijednost true ako lista sadrži određenu vrijednost.
dobiti() Vraća element na zadanoj poziciji.
prazno je() Vraća vrijednost true ako lista ne sadrži elemente.
minus() Stvara novu listu sastavljenu od elemenata originala, isključujući one navedene u zadanoj kolekciji.
plus() Stvara novu listu sastavljenu od elemenata originala zajedno s onima iz zadane kolekcije.
pop () Uklanja posljednju stavku s popisa i vraća je.
ukloniti() Uklanja element na zadanoj poziciji.
obrnuti () Stvara novu listu koja obrće elemente izvorne liste.
veličina() Vraća broj elemenata u listi.
vrsta() Vraća sortiranu kopiju liste.

Uzmite u obzir sljedeće Groovy primjer skripte.

def y = ["Guru99", "is", "Best", "for", "Groovy"]
println y
y.add("Learning")
println(y.contains("is"))
println(y.get(2))
println(y.pop())

Izlaz:

[Guru99, is, Best, for, Groovy]
true
Best
Learning

Prvi redak ispisuje originalnu listu od pet elemenata, jer add() još nije trčao/potrčala. get(2) vraća "Najbolje" od Groovy liste su indeksirane s nulom i pop() vraća "Učenje" jer je ta stavka dodana zadnja.

Groovy Karte

A Groovy Mapa je skup parova ključ-vrijednost. Ključevi ne trebaju navodnike kada su jednostavni identifikatori, što literale mape održava vrlo kompaktnima.

Primjeri Groovy Karte:

  • [tutorial: 'Java', language: 'Groovy'] je skup od dva para ključ-vrijednost.
  • [:] predstavlja praznu mapu.

Evo popisa dostupnih metoda mapiranja u Groovy.

način Description
sadržiKljuč() Provjerava sadrži li mapa zadani ključ.
dobiti() Pretražuje ključ u Mapi i vraća odgovarajuću vrijednost. Ako se ne pronađe nijedan unos, vraća null.
KeySet() Vraća skup ključeva u Mapi.
staviti() Povezuje navedenu vrijednost s danim ključem. Ako Mapa već sadrži mapuping za taj ključ, stara vrijednost se zamjenjuje.
veličina() Vraća broj mapa ključ-vrijednostpings.
vrijednosti() Vraća prikaz kolekcije vrijednosti.

Groovy primjer:

def y = [fName:'Jen', lName:'Cruise', sex:'F']
print y.get("fName")

Izlaz:

Jen

Groovy zatvarači

A Groovy Closure je blok koda omotan kao objekt. Ponaša se kao metoda ili funkcija, ali se može pohraniti u varijablu i prenositi kao bilo koja druga vrijednost.

Primjer jednostavnog zatvaranja:

def myClosure = {
    println "My First Closure"
}
myClosure()

Izlaz:

My First Closure

Zatvorenje može prihvatiti parametre. Popis identifikatora je odvojen zarezom, a strelica (->) označava kraj popisa parametara.

def myClosure = {
    a, b, c ->
    y = a + b + c
    println y
}
myClosure(1, 2, 3)

Izlaz:

6

Zatvaranje također može vratiti vrijednost.

def myClosure = {
    a, b, c ->
    return (a + b + c)
}
println(myClosure(1, 2, 3))

Izlaz:

6

Kada ne deklarirate popis parametara, Groovy pruža jedan implicitni parametar pod nazivom itZatvaranja se također mogu prenijeti na druga zatvaranja, što je upravo način na koji metode prikupljanja poput each, collecti findAll raditi.

Groovy Alati

Pogledat ćemo tri važna alata koja dolaze s Groovy distribucija:

  1. groovysh: interaktivno izvršava kod iz naredbenog retka.
  2. groovyConsole: grafički prozor za interaktivno izvršavanje koda.
  3. groovy: izvršava Groovy skriptne datoteke, na isti način na koji biste pokrenuli Perl ili Python skripta.

Groovysh

  • Ljuska naredbenog retka.
  • Pomaže vam u izvršenju Groovy interaktivno kodirati.
  • Omogućuje unos pojedinačnih naredbi ili cijelih skripti.

Snimka zaslona ispod prikazuje kako groovysh procjenjuje izraze redak po redak.

Pokretanje ljuske naredbenog retka u Groovyshu Groovy izvještaji

Groovy Utješiti

  • Swing sučelje koje djeluje kao minimalno Groovy razvojni urednik.
  • Omogućuje vam pisanje i pokretanje Groovy interaktivno kodirati.
  • Pomaže vam pri učitavanju i pokretanju Groovy datoteke skripti.

u Groovy Konzola ispod, skripta se upisuje u gornji okvir, a rezultat se pojavljuje u donjem okviru.

Groovy Konzolni Swing editor sa skriptnim i izlaznim oknima

Groovy

The groovy naredba je procesor koji izvršava Groovy programa i skripti. Kompajlira izvorni kod u bajtkod u memoriji i izvršava ga u jednom koraku, tako da nije potrebna zasebna faza izgradnje. Također se može koristiti za testiranje jednostavnih Groovy izraze direktno iz terminala, kao što je prikazano dolje.

groovy naredba koja izvršava skriptu iz terminala

Gdje Groovy Koristi se u stvarnim projektima

Većina programera susreće Groovy ne kao samostalni jezik, već kao sloj skriptiranja unutar alata koji već izvršavaju. Poznavanje mjesta gdje se pojavljuje znatno olakšava postavljanje gornje sintakse.

Oruđe Kako Groovy se koristi
Jenkins Deklarativni i skriptirani cjevovodi napisani su u Groovy DSL i dijeljene biblioteke su obične Groovy klase.
Gradle Klasični build.gradle datoteka je Groovy skripta, zbog čega se čita kompaktnije od Maven POM ili Mrav datoteka za izgradnju.
SoapUI Groovy Koraci skripte i tvrdnje skripte pokreću dinamičke podatke zahtjeva i prilagođene provjere odgovora.
Spock A Groovy okvir za testiranje čiji se blokovi "dano-kada-onda" i tablice podataka široko koriste za JVM jedinične testove.
Elasticsearch i Grails Grails gradi potpune web aplikacije na Groovyi nekoliko alata za podatke prihvaća Groovy za prilagođeno skriptiranje.

In ispitivanje automatizacije Za timove je ovo dvostruko važno: CI posao koji pokreće paket i sami testovi mogu biti Groovy, tako da jedan jezik pokriva logiku povezivanja cjevovoda i asertivne logike.

Groovy Vs. Java

Groovy Java
Zadani modifikator pristupa je javni, pa je metoda bez modifikatora dostupna izvan svoje klase i paketa. Zadani modifikator pristupa je package-private, tako da su polja, metode i klase bez modifikatora vidljivi samo unutar svog paketa.
Getteri i setteri se automatski generiraju za svojstva klase. Metode za dobivanje i postavljanje polja morate sami definirati.
Groovy omogućuje zamjenu varijabli unutar dvostruko navodnih nizova. Java ne podržava interpolaciju stringova.
Podaci o vrsti nisu obavezni. Podaci o vrsti su obavezni.
Izjave ne moraju završavati točkom-zarezom. Svaka naredba završava točkom-zarezom.
Groovy automatski omotava svaku skriptu u generiranu Script klasu. Potrebna vam je glavna metoda da biste klasu napravili izvršnom.
Sve je javno i dinamično prema zadanim postavkama, ali @CompileStatic Vraća Java-razina brzine i provjera. Sve se statički kompilira i provjerava tijekom izgradnje.

Mitovi o Groovy

Mit Stvarnost
Groovy može se koristiti samo za skriptiranje. Izvrstan je za skriptiranje, ali se također kompajlira u obične klase koje možete isporučiti unutar bilo koje JVM aplikacije.
Groovy se sve vrti oko zatvaranja, tako da je to samo funkcionalni programski jezik. Groovy posuđuje ideje iz funkcionalnih jezika kao što su Lisp i Clojure, ali u srži ostaje objektno orijentirani jezik.
Groovy vrijedi koristiti samo za razvoj vođen testiranjem. Groovy snažno pristaje TDD-u sa Spockom, ali to sigurno nije jedini razlog za njegovo korištenje.
Samo trebate Groovy ako želite koristiti Grails. Grails je moćan okvir za web razvoj, ali Gradle, Jenkinsi Spock svi koriste Groovy bez toga.

Nedostaci korištenja Groovy

  • JVM i Groovy Vrijeme pokretanja skripte je sporo, što ograničava njezinu upotrebu za brzo skriptiranje na razini operativnog sustava.
  • Groovy nije široko prihvaćen izvan zajednica usmjerenih na JVM.
  • Nezgodno je koristiti Groovy bez IDE-a koji razumije njegove dinamičke značajke.
  • Dinamička dispečerska služba može učiniti Groovy kod sporiji od ekvivalenta Java kod osim ako se ne prijavite @CompileStatic.
  • Groovy programima može biti potrebno više memorije nego običnim Java Programi.
  • Znanje o Java je zapravo preduvjet.

Nakon što se osjećate ugodno s Groovy sintaksa, prirodni sljedeći korak je ekosustav oko nje. Ojačajte osnove s Java udžbenik, onda vidi kako Groovy skripte pokreću izgradnju i implementaciju u Jenkins, usporedite alate za izradu s Maven i Apaški mravi istražite kako Groovy tvrdnje se uklapaju u Selenium i API testne pakete.

Pitanja i odgovori

Groovy 5.0 cilja JDK 11 i novije verzije. Groovy 4.0 još uvijek podržava JDK 8 i ono što je u razvoju Groovy Linija 6.0 cilja JDK 17. Provjerite tablicu sistemskih zahtjeva na službenoj stranici za preuzimanje Apachea prije nego što se odlučite za verziju.

Ne. Naredba groovy kompajlira .groovy datoteku u bajtkod u memoriji i odmah je pokreće. I dalje možete kompajlirati unaprijed s groovyc kada želite da se .class datoteke za višekratnu upotrebu pakiraju unutar Java prijava.

Da. Apache Groovy objavljen je pod Apache licencom 2.0, tako da su komercijalna upotreba, modifikacija i redistribucija dopuštene bez ikakvih troškova. Na redistribuirane verzije primjenjuju se samo uobičajene obveze navođenja izvora i obavijesti o licenci.

Groovy je programski jezik. Grails je full-stack web framework napisan u Groovy. Možete koristiti Groovy za datoteke za izgradnju, cjevovode ili testove bez instaliranja Grailsa, ali Grails ne može postojati bez Groovy.

Dobro se nose s uobičajenim idiomima poput zatvaranja, metoda prikupljanja i koraka cjevovoda. Uvijek prvo pokrenite generirane skripte u groovyConsoleu, jer se modeli ponekad stapaju. Java sintaksa s Groovy prečace ili izmišljati metode koje ne postoje.

Zalijepi stog trace i skriptu u pomoćnika kako bi se istaknuli vjerojatni uzroci kao što je GroovyCastException, nedostajuće odobrenje sandboxa ili pogrešan delegat za zatvaranje. Tretirajte svaki prijedlog kao hipotezu i potvrdite ga u odnosu na stvarni zapisnik izgradnje.

Sažmite ovu objavu uz: