ObrázokAutomatizácii som sa na stránkach tohto blogu venoval už niekoľkokrát. O tom, že to vôbec nie je okrajová téma v oblasti vývoja softvéru svedčí aj veľké množstvo nástrojov, pomocou ktorých ju viete vo svojom projekte realizovať. Je tu v skutočnosti už tak dlho, že sa dá hovoriť o generáciách jej nástrojov. Dnes sa pozrieme na jeden takýto z tej novšej generácie. Nástroj Gradle opísal vo svojej knihe Gradle in Action Bejamin Muschko.

Kniha začína, celkom logicky, kapitolou o tom, čo to automatizácia je a na čo je dobrá. Ak ste o nej doteraz nevedeli, je to kapitola ideálna pre vás. Ak už viete, o čo tu ide, stále je dobré si dôvody zrekapitulovať a nazbierať nejaké argumenty do diskusií s kolegami, ktorí takéto knihy nečítajú. Ako hlavné výhody uvádza:

  1. odbúranie manuálnej práce;
  2. to, že všetky zostavenia sú vždy rovnaké, a teda produkujú rovnaký výsledok (žiadna odchýlka typu: „Jožo zabudol nakopírovať pred zostavením správny konfiguračný súbor.“);
  3. zostavenia sú ľahko prenositeľné do iného prostredia.

V kapitole nechýba zoznam existujúcich nástrojov na automatizáciu. Pre Javu v takomto zozname určite nemôžu chýbať Ant a Maven. Gradle sa v podstate dá definovať ako nová generácia, ktorá si od oboch požičiava niečo. Čo to teda vlastne je?

Gradle je nástroj, ktorý umožňuje vytvárať automatické zostavenia. Tie sú popísané pomocou jazyka Groovy, čo je nový dynamický jazyk postavený pre JVM. Je to jazyk, ktorý skôr pripomína skriptovanie ako kompilované jazyky, ale v rámci neho môžete používať syntax Javy, takže to, ako bude nakoniec vyzerať kód, je na vás. Gradle ale ku Groovy pridáva tzv. Domain Specific Language (skratka DSL). To znamená, že okrem klasickej syntaxe Groovy môžete v Gradle skripte používať aj príkazy, ktoré majú zmysel len v oblasti zostavovania softvéru. Inak povedané, Gradle obohatilo Groovy o ďalšie príkazy, ktorými jednoducho viete definovať zostavenia.

Groovy si od každého zo svojich hlavných predchodcov (Ant, Maven) niečo zobral. Od Antu možnosť procedurálneho definovania toho, čo sa bude diať. Teda viete zadefinovať presné poradie jednotlivých krokov. Od Mavenu Gradle prebral prístup conventions over configurations. To znamená, že veľa vecí je v Gradle preddefinovaných (t.z. ak nejakú štandardnú premennú zostavenia – napr. cesta k priečinku so zdrojovými kódmi – nezadefinujete, má automaticky svoju default hodnotu). Vďaka tomu platí, že viaceré projekty spravované Gradle budú vyzerať rovnako, čo uľahčí prechod vývojára od jedného k druhému. Zároveň to napomáha pri budovaní projektu, kde už vývojár dostane nejaký úvodný predpis, ako by to malo vyzerať a nemusí vymýšľať vlastnú štruktúru priečinkov. To sú tiež hlavné výhody spomínané často pri Mavene.

Čo sa týka toho, ako je proces v Gradle definovaný, tak ten má štruktúru acyklického grafu, kde každá úloha (task) má povedané, na ktorom tasku závisí a teda, ktorý task sa musí vykonať pred ním. Následne je potrebné len spustiť Gradle s posledným taskom, ktorý má byť vykonaný a Gradle sa postará o to, aby boli vykonané aj všetky tasky, na ktorých daný task závisí a takto rekurzívne až k začiatku celého grafu závislosti. O týchto aspektoch Gradle pojednáva záver prvej kapitoly z knihy. Autor sa snaží vysvetliť, v čom je Gradle podobný svojím predchodcom a v čom sa líši. Nechýba ani návod ako migrovať existujúce projekty v Ant-e alebo Mavene na Gradle.

Druhá kapitola knihy sa venuje osobitným témam ako je testovanie, správa závislostí alebo pluginy pre Gradle. Vo všetkom tomto sa Gradle značne podobá na Maven, pretože ma integrovanú podporu na spravovanie závislostí alebo tiež je do neho možné inštalovať pluginy. Takýto nainštalovaný plugin potom dokáže rozšíriť DSL Gradle (napríklad plugin pre Android prinesie tasky a konfigurácie určené pre Android projekty) a tiež prinesie množinu zmysluplných default hodnôt, takže už len treba vytvoriť projekt tak, aby spĺňal tieto východzie hodnoty a všetko bude tak trochu magicky fungovať.

Tretia kapitola knihy sa venuje ďalším komplikovanejším témam ako je zostavovanie projektov, ktorých zdrojové kódy sú písané rôznymi jazykmi. Medzi ďalšie takého témy napríklad patrí podpora rôznych IDE pre Gradle, zavádzanie Gradle do Continues Integration serverov alebo zostavovanie a publikovanie artefaktov do repozitárov (Gradle dokáže bez problémov spolupracovať s Maven aj Apache Ivy repozitármi).

Gradle ako nástroj má pred sebou jednoznačne perspektívnu budúcnosť. Vyzerá, že sa mu podarilo poučiť sa z dobrých aj zlých vlastností jeho predchodcov a pridať niečo nové navyše. Ostáva tu samozrejme problém toho, že je úplne nový nástroj s novou syntaxov. Ak ste doteraz používali napr. Ant, tak prvý pohľad na Gradle môže pôsobiť trochu odstrašujúco. Groovy nie je XML jazyk, ani Java (aj keď sa tak vie tváriť). Tiež zvyknúť si na DSL a model acyklického grafu nejaký čas trvá. To už je ale cena za prechod na nové systémy, ktoré sú postavené na iných princípoch.

Už som si tak trochu zvykol, že knihy zo série „… in Action“ majú svoju kvalitu a ani pri tejto to nie je inak. Kniha začína správnym úvodom, ktorý by vás mal navnadiť na to, prečo má zmysel čítať ďalej. Postupne potom prechádza od jednoduchých tém k zložitejším a v prílohe tiež nechýba rýchlokurz Groovy, ktorý je v prípade Gradle veľmi prospešný.