Toto je pokračovanie článku o Apache Ivy, ktorého prvú časť môžete nájsť tu. V nej sme si povedali, že Ivy je nástroj, ktorý sa označuje ako tranzitívny manažér závislostí, a že jeho hlavnou úlohou je pripraviť (fyzicky stiahnuť na počítač) množinu súborov podľa ich závislostí definovaných v repozitári. V tejto druhej časti sa pozrieme na jednu z najkomplikovanejších tém, ktoré sa Ivy týkajú, a tou sú konfigurácie, a tiež na najčastejšie príkazy, ktoré Ivy pozná.
V predchádzajúcom článku som hovoril, že závislosti sú robené na úrovni modulov, ale že výsledkom je skupina súborov, ktoré sa odvodzujú podľa závislosti. Niekde medzi tým musí byť spojitosť. A tá spojitosť sa nazýva Konfigurácia. Konfigurácie sú asi jednou z najzložitejších tém, čo sa týka Ivy, a preto sa pri nich chvíľu zdržím.
Každý modul má v sebe zadefinované súbory (artefakty), ktoré obsahuje. Rovnako má zadefinovanú množinu konfigurácií, kde najpodstatnejší parameter konfigurácie je jej názov. Dôležité je, že v zozname artefaktov má tiež povedané, do ktorých konfigurácií daný artefakt patrí. Táto informácia sa dá potom využiť tak, že ja požiadam modul, aby mi odovzdal jeho artefakty, ale tiež mu definujem konfiguráciu, a tak je dosť možné, že dostanem len tie, ktoré sú pre danú konfiguráciu určené. Tiež sa to dá vyjadriť jednoduchou rovnicou:
modul + konfigurácia = artefakty
Konfigurácia je teda spojivo medzi modulom a súbormi, ktoré obsahuje. Alebo inak povedané hovorí o tom, že pre danú konfiguráciu modulu predstavuje v systéme tieto a tieto súbory. Je tu ale druhý dôležitý fakt a to, že konfigurácia je tiež súčasťou závislosti. Modul totiž nedefinuje len väzbu na iný modul, ale súčasťou tejto väzby je tiež informácia, že konfigurácia modulu A závisí na konfigurácii modulu B. Často sa tak vytvára reťaz, kde moduly medzi sebou závisia na rovnakej konfigurácii, a teda ak začnete vyberať závislosti pre danú konfiguráciu, získate všetky artefakty od všetkých závislých modulov v danej konfigurácii. Ešte inak povedané, viete aktivovať celú sieť závislých modulov stále s inou konfiguráciou a získate tak stále inú skupinu súborov.
Chce to nepochybne dosť rozvinuté abstraktné myslenie, aby ste to boli schopní predstaviť si na prvýkrát (mne osobne to robilo pomerne veľké problémy), takže si dajme jeden príklad z praxe. Máte repozitár, v ktorom sú uložené zdrojové kódy a binárne súbory vytvorené z prekladu zdrojových kódov. Zdrojové kódy sú vždy zoskupené spolu s binárkami v Ivy moduloch. A vy chcete raz vytiahnuť všetky zdrojové kódy podľa nejakých závislostí a raz všetky binárky. Takže do každého modulu zadefinujete 2 konfigurácie, napríklad binary a source a navzájom moduly previažete tak, že ak niekto berie z daného modulu artefakty konfigurácie binary automaticky sa získavajú artefakty závislých modulov z ich binary konfigurácie. Výsledok je, že z jedného repozitára potom viete vytiahnuť skupiny súborov rozdielneho typu podľa toho, akú konfiguráciu použijete.
Posledná téma, ktorú ohľadom Ivy nie je možné vynechať, sú dva základné príkazy, ktoré Ivy používa a to je Resolve a Retrieve. Resolve znamená dohľadanie všetkých závislosti pre daný modul a danú konfiguráciu. Znamená to, že Ivy skontroluje všetky repozitáre (môže ich byť viac ako jeden), zistí, či má dostupné všetky potrebné moduly a ich konfigurácie a prípadne všetko potrebné pripraví do cache. Ten druhý krok je, že potrebujete tieto súbory vytiahnuť do jedného priečinku a na to slúži práve Retrieve. Ten využije informácie z cache z Resolve príkazu a všetko potrebné pripraví.
Ivy nie je jednoduchý nástroj, pretože nerieši jednoduchý problém. Moje články mali za úlohu vytvoriť predstavu, čo je to za nástroj, aké sú základné pojmy v Ivy svete. Ak ste očakávali Ivy návod s ukážkami kódu, tak vás sklamem. Z môjho pohľadu je dôležitejšie najprv pochopiť systém ako celok a až potom sa začať zaoberať konkrétnymi detailami. V prípade, že ste pojali základné pojmy, pochopili účel a aj jednotlivé časti systému Ivy a vysporiadali sa s tým, prečo a ako sú postavené konfigurácie, ste na najlepšej ceste začať tento nástroj používať.