Unifikácia softvéru cez Maven

Som toho názoru, že akýkoľvek stredne veľký alebo veľký softvérový projekt musí začať používať automatizáciu, inak je odsúdený na problémy. Pod pojmom automatizácia mám na mysli, že opakujúce sa kroky nebudú vykonávané manuálne, ale pomocou softvérového nástroja, resp. určité úkony sa začnú diať automaticky bez toho, aby ich musel ručne spúšťať človek. Nástrojov, ktoré sa dajú na automatizáciu použiť, je mnoho. Dnes si povieme niečo o nástroji Maven, ktorý je špeciálny tým, že má v sebe zabudovaný manuál na automatizáciu.

Maven je nástroj, ktorý vie naraz spĺňať niekoľko úloh:

  • Automatizovať rôzne činnosti, ktoré súvisia s vývojom softvéru

  • Efektívne spravovať závislosti projektov (ak vyvíjate viacero projektov naraz) alebo závislosti na knižniciach tretích strán

  • Definovať štruktúru projektu a tým zabezpečiť, že aj neskúsený tvorca vyrobí projekt bez veľkých chýb, a zároveň všetky projekty spravované Mavenom sú jednotné

Pravdupovediac prvé 2 body z predchádzajúceho zoznamu nie sú až taká novinka. Dnes už existuje veľa nástrojov, ktoré umožňujú robiť to isté. Vo svete Javy, odkiaľ Maven pochádza, je asi najznámejší jeho predchodca Ant s rozšírením Ivy pre spravovanie závislostí. To, čo odlišuje Maven od veľa jeho predchodcov, je tretí bod. Medzi Mavenom a Antom je totiž taký rozdiel ako medzi výrobnou linkou a dielňou, ktorá obsahuje všetky základné nástroje na prácu. Pri výrobnej linke stačí vedieť ako ju spustiť, kde vložiť vstupy a odkiaľ vypadnú výstupy (zjednodušene povedané). Pri dielni s nástrojmi potrebujete poznať celý proces výroby, aby ste pomocou základných nástrojov vyrobili požadovaný výrobok. Ant je práve tá dielňa plná nástrojov. Obsahuje ich naozaj mnoho, ale neponúka žiaden návod, ako dať produkt celý dokopy. A tak, kým získate nejaký výsledok, musíte urobiť množstvo rozhodnutí.

Maven na rozdiel od toho ponúka takzvaný Default Lifecycle. Je to v podstate zostavovací skript, ktorý Maven obsahuje sám v sebe a štandardne spúšťa pre každý projekt. Samozrejme, taký skript musí vedieť, kde ma nájsť vstupy, kde odložiť výstupy a čo presne spraviť. A tu prichádzame k druhému pojmu, ktorý sa viaže na Maven: convention over configuration (zvyklosti nad nastaveniami). Maven totiž predpokladá, že zdrojové kódy nájde v priečinku „src“, testy v priečinku „test“ a výsledok má odložiť do adresára „target“, atď. Inak povedané, nemusím Mavenu hovoriť, kde čo má nájsť, ale skôr prispôsobiť mu svoj projekt (aj keď opačný prípad je tiež možný). Na prvý pohľad to môže vyzerať ako obmedzovanie, ale v skutočnosti je to celkom prospešné. V prvom rade vám Maven dáva na výber. Môžete použiť jeho default štruktúru, alebo môžete použiť svoju, ale musíte ho nakonfigurovať (napr. pri Ante môžete použiť ľubovoľnú štruktúru, ale stále musíte Ant nakonfigurovať). Za ďalšie vám to pomôže navrhnúť štruktúru, ktorá je používaná tisíckami projektov vo svete a celkom úspešne (určite vám to umožní vyhnúť sa rôznym antipatternom, ktorých sa dá ľahko dopustiť). V neposlednom rade to unifikuje váš projekt s inými. To sa vyplatí vám, ak by ste sa dostali k inému projektu, alebo naopak niekomu inému, kto by sa dostal k vášmu. A na záver treba povedať, že to zrýchľuje nasadenie Mavenu na nejaký projekt. Ak totiž máte tú správnu štruktúru, tak vám stačí Maven xml popisný súbor, ktorý obsahuje niekoľko jednotiek riadkov súborov a to je všetko.

Maven je teda nástroj, ktorý už v sebe obsahuje hneď po nainštalovaní konfiguráciu, ktorú viete okamžite použiť pre váš projekt. Na to, aby ste ho mohli začať používať, potrebujete vytvoriť tzv. POM súbor (pom.xml), čo je skratka od Project Object Model. Tento súbor by mal popisovať váš projekt, ale len veľmi malá sada z toho, čo môže obsahovať, je povinná. Medzi tieto základné údaje patria tzv. koordináty projektu, čo je štvorica údajov, ktorá obsahuje:

  • Názov skupiny vašich projektov (niečo ako com.example.projekt)

  • Názov vášho projektu (napríklad kalkulacka)

  • Verziu (napríklad 1.1.0)

  • Typ projektu (napríklad jar)

Na základe týchto údajov je Maven schopný váš projekt vypublikovať a opäť nájsť v repozitári. Ako som už spomenul vyššie, Maven obsahuje tiež nástroje na spravovanie závislostí. Podstata je, že váš projekt používa výstupy iných projektov, a tie zase môžu závisieť na iných projektoch, atď. Maven zabezpečí, že všetky potrebné knižnice pre váš projekt budete mať k dispozícii. V POM súbore na to slúži špeciálna časť, kde definujete závislosti vášho projektu a to presne na základe údajov vymenovaných vyššie. Maven sa potom pripája na repozitár, odkiaľ ich sťahuje do vášho lokálneho repozitára (t.j. väčšinou na disk vášho počítača), a odtiaľ napríklad pribalí ako knižnicu do vášho jar-ka alebo war-ka. Je nutné povedať, že Maven je mocný nástroj, ale nie sám o sebe. V skutočnosti Maven ako taký toho veľa nevie. Hlavne dokáže získať závislosti, a spúšťať pluginy. Práve tie pluginy sú to, čo robia z Mavenu všestranný nástroj. Existuje ich obrovské množstvo pre rôzne účely. Stačí ich uviesť v POM súbore (aj s príslušnou konfiguráciou) a Maven si ich automaticky stiahne a použije. Tak vlastne dokáže automaticky rozširovať akcie, ktoré je schopný vykonať. Toto všetko sú len základné informácie. Na plné pochopenie Mavenu odporúčam niektorú z kníh, ktoré o ňom boli napísané. Každopádne je Maven nástroj, ktorý vo svete Java Enterprise riešení môže byť len veľmi ťažko prehliadaný.