{"id":49,"date":"2013-07-16T19:10:33","date_gmt":"2013-07-16T17:10:33","guid":{"rendered":""},"modified":"2018-09-17T21:55:23","modified_gmt":"2018-09-17T19:55:23","slug":"spletite-zavislosti-a-ivy","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/spletite-zavislosti-a-ivy\/","title":{"rendered":"Spletit\u00e9 z\u00e1vislosti a Ivy"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/sdfsd4.png\" alt=\"Obr\u00e1zok\" width=\"250\" height=\"188\" \/>Java m\u00e1 ve\u013ea spolo\u010dn\u00e9ho so svetom open source (mo\u017eno by sa dala pova\u017eova\u0165 za jeho s\u00fa\u010das\u0165). A ako tak\u00e1 m\u00e1 jednu vlastnos\u0165 charakteristick\u00fa pre open source \u2013 modularitu kni\u017en\u00edc. Pod t\u00fdmto pojmom mysl\u00edm to, \u017ee svet kni\u017en\u00edc tret\u00edch str\u00e1n, ktor\u00e9 v Jave viete pou\u017ei\u0165, je tvoren\u00fd obrovsk\u00fdm mno\u017estvom mal\u00fdch kni\u017en\u00edc. Aby ste mohli spusti\u0165 svoju aplik\u00e1ciu, potrebujete (fyzicky dosta\u0165 na svoj po\u010d\u00edta\u010d) aj nieko\u013eko desiatok tak\u00fdchto kni\u017en\u00edc, a \u010do je hor\u0161ie, tieto kni\u017enice maj\u00fa tie\u017e svoje z\u00e1vislosti, ktor\u00e9 mus\u00edte n\u00e1js\u0165. Aj ke\u010f je t\u00e1to modularita ohromn\u00fd n\u00e1stroj, je to z\u00e1rove\u0148 neuverite\u013ene komplexn\u00fd probl\u00e9m. A ako tak\u00fd je ru\u010dne \u0165a\u017eko rie\u0161ite\u013en\u00fd, a preto vznikli n\u00e1stroje, ktor\u00e9 ho pom\u00e1haj\u00fa rie\u0161i\u0165. Jedn\u00fdm z nich je aj Apache Ivy.<!--more--><!--break--><\/p>\n<p>Ako som povedal, pr\u00edprava v\u0161etk\u00fdch kni\u017en\u00edc tret\u00edch str\u00e1n vie by\u0165 v Jave zna\u010dne komplikovan\u00fd probl\u00e9m. A preto aj n\u00e1stroj, ktor\u00fd ho rie\u0161i, je zna\u010dne komplikovan\u00fd. A preto ani tento \u010dl\u00e1nok nebude \u00faplne jednoduch\u00e9 \u010d\u00edtanie. Ak ale h\u013ead\u00e1te podobn\u00fd n\u00e1stroj, alebo u\u017e ste o Apache Ivy po\u010duli a chcete sa dozvedie\u0165 viac, mohol by v\u00e1m by\u0165 v nie\u010dom u\u017eito\u010dn\u00fd.<\/p>\n<p><a href=\"http:\/\/ant.apache.org\/ivy\/\">Apache Ivy<\/a> je podprojekt projektu <a href=\"http:\/\/ant.apache.org\/\">Apache Ant<\/a>, ktor\u00e9ho hlavnou \u00falohou je automatiz\u00e1cia procesov. Ivy (z angli\u010dtiny \u201ebre\u010dtan\u201c) sa \u0161pecializuje na \u00falohu z\u00edskavania s\u00faborov na z\u00e1klade ich z\u00e1vislost\u00ed medzi sebou. D\u00f4le\u017eit\u00e9 je si uvedomi\u0165 samotn\u00fa podstatu probl\u00e9mu, ktor\u00fa Ivy rie\u0161i, preto\u017ee potom v\u00e1m jednotliv\u00e9 jeho funk\u010dnosti za\u010dn\u00fa d\u00e1va\u0165 v\u00e4\u010d\u0161\u00ed zmysel. T\u00e1 podstata je, \u017ee m\u00e1te syst\u00e9m, ktor\u00fd pozost\u00e1va zo s\u00faborov zoskupen\u00fdch do mal\u00fdch podmno\u017e\u00edn (s\u00fabory, ktor\u00e9 spolu ve\u013emi \u00fazko s\u00favisia, napr\u00edklad zdrojov\u00e9 k\u00f3dy, a tie ist\u00e9 zdrojov\u00e9 k\u00f3dy prelo\u017een\u00e9 do bin\u00e1rnej podoby). Okrem toho s\u00fa v syst\u00e9me definovan\u00e9 z\u00e1vislosti medzi t\u00fdmito podmno\u017einami (ak s\u00fa podmno\u017einy body, tak spolu so z\u00e1vislos\u0165ami vytv\u00e1raj\u00fa \u0161trukt\u00faru grafu). Tak\u017ee m\u00e1te s\u00fabory a z\u00e1vislosti medzi nimi. Takto vyzer\u00e1 syst\u00e9m a teraz je podstatn\u00e9, \u010do s n\u00edm chcete robi\u0165. Chcete z neho vytiahnu\u0165 jeden s\u00fabor z nejakej podmno\u017einy a v\u0161etky s\u00fabory na ktor\u00fdch pr\u00e1ve tento jeden s\u00fabor z\u00e1vis\u00ed (napr\u00edklad ich potrebuje na to, aby ste ho mohli spusti\u0165 a on bude korektne fungova\u0165). To je cel\u00e9. To je z\u00e1kladn\u00e1 my\u0161lienka. Ivy sa ofici\u00e1lne ozna\u010duje ako <em>tranzit\u00edvny mana\u017e\u00e9r z\u00e1vislost\u00ed<\/em>. To <em>tranzit\u00edvny<\/em> je tam preto, lebo nerob\u00ed len jeden prechod od aktu\u00e1lneho s\u00faboru k \u010fal\u0161iemu, ale je schopn\u00fd vytiahnu\u0165 z\u00e1vislosti do \u013eubovo\u013enej h\u013abky.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"vertical-align: middle; display: block; margin-left: auto; margin-right: auto;\" src=\"\/sites\/default\/files\/imagepicker\/1\/ivy_zavislsoti.png\" alt=\"Obr\u00e1zok\" width=\"300\" height=\"251\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Na \u010do je to dobr\u00e9? No, jedn\u00fdm z pr\u00edkladov s\u00fa bal\u00edky v Jave. V jednom z predch\u00e1dzaj\u00facich \u010dl\u00e1nkov som p\u00edsal, \u017ee Java o\u010dak\u00e1va, \u017ee v\u0161etky potrebn\u00e9 triedy (\u010dasto zabalen\u00e9 v kni\u017eniciach \u2013 jar s\u00faboroch) n\u00e1jde vo svojej Java Class Path. V\u00e1\u0161 program m\u00f4\u017ee z\u00e1visie\u0165 na nejak\u00fdch bal\u00edkoch, ktor\u00e9 m\u00f4\u017eu z\u00e1visie\u0165 na \u010fal\u0161\u00edch a tak \u010falej. V\u00fdsledok m\u00f4\u017ee by\u0165, \u017ee h\u013eada\u0165 ru\u010dne a pripravova\u0165 ich m\u00f4\u017ee by\u0165 komplikovan\u00e1 a pracn\u00e1 robota. Ivy sa sna\u017e\u00ed rie\u0161i\u0165 obe tieto probl\u00e9my. Ten prv\u00fd pomocou syst\u00e9mu popisn\u00fdch s\u00faborov, pomocou ktor\u00fdch sa orientuje, ktor\u00e9 z\u00e1vislosti dan\u00fd bal\u00edk potrebuje a ten druh\u00fd pomocou Ivy kni\u017enice, ktor\u00e1 dok\u00e1\u017ee vykon\u00e1va\u0165 pr\u00edkazy Ivy, a ktor\u00e1 vykon\u00e1 tranzit\u00edvne stiahnutie potrebn\u00fdch z\u00e1vislost\u00ed.<\/p>\n<p>Ivy potrebuje tieto bal\u00edky odniekia\u013e stiahnu\u0165. A tu sa dost\u00e1vame k pojmu <em>repozit\u00e1r<\/em>. To je miesto, kde Ivy dok\u00e1\u017ee vyh\u013ead\u00e1va\u0165 bal\u00edky a z\u00edskava\u0165 ich. Nenach\u00e1dzaj\u00fa sa tam len samotn\u00e9 s\u00fabory, ale aj popisy ich z\u00e1vislost\u00ed, tak\u017ee Ivy vie z tak\u00e9ho zoznamu z\u00edska\u0165 s\u00fabor aj so v\u0161etk\u00fdmi jeho z\u00e1vislos\u0165ami (ak s\u00fa v\u0161etky v repozit\u00e1ri pr\u00edtomn\u00e9). Aby to Ivy nemuselo robi\u0165 pre ka\u017ed\u00fd pr\u00edpad, existuje nie\u010do, \u010do sa naz\u00fdva <em>cache<\/em>. Je to lok\u00e1lna k\u00f3pia repozit\u00e1ra, kde sa Ivy pozer\u00e1 v prvom rade a ak tam nen\u00e1jde to, \u010do je potreba, tak prist\u00fapi k repozit\u00e1ru. Aby sme si to pekne utriedili, po\u010fme si zrekapitulova\u0165 pojmy Ivy sveta:<\/p>\n<p><em>Modul<\/em> &#8211; skupina s\u00faborov (predt\u00fdm som to ozna\u010doval ako podmno\u017einu), ktor\u00e9 spolu \u00fazko s\u00favisia. Modul je z\u00e1kladn\u00e1 v\u00e4zobn\u00e1 jednotka pre Ivy, \u010do znamen\u00e1, \u017ee v\u00e4zby s\u00fa vytv\u00e1ran\u00e9 medzi modulmi a nie s\u00fabormi. Modul je tie\u017e definovan\u00fd Ivy popisn\u00fdm s\u00faborom, ktor\u00fd hovor\u00ed, \u010do je to za modul (n\u00e1zov, verzia, stav v\u00fdvoja at\u010f), ak\u00e9 s\u00fabory poskytuje a \u010do s\u00fa jeho z\u00e1vislosti. Repozit\u00e1r je potom ako sie\u0165 modulov, ktor\u00e9 sa medzi sebou odkazuj\u00fa &#8211; graf.<\/p>\n<p><em>Artefakt<\/em> &#8211; jeden s\u00fabor, ktor\u00fd je s\u00fa\u010das\u0165ou niektor\u00e9ho modulu. Modul m\u00f4\u017ee ma\u0165 \u013eubovo\u013en\u00fd po\u010det s\u00faborov, ale ako som p\u00edsal, mali by to by\u0165 s\u00fabory, ktor\u00e9 medzi sebou \u00fazko s\u00favisia. Artefakt predstavuje najmen\u0161iu jednotku (\u010falej nedelite\u013en\u00fa) v Ivy syst\u00e9me. A tie\u017e, ako som u\u017e p\u00edsal, je hlavnou \u00falohou Ivy vyhodnocova\u0165, ktor\u00e9 s\u00fabory &#8211; artefakty s\u00fa potrebn\u00e9 a poskytn\u00fa\u0165 ich.<\/p>\n<p><em>Dependency<\/em> &#8211; v\u00e4zba medzi modulmi. V r\u00e1mci v\u00e4zby definujeme hlavne n\u00e1zov modulu, ale m\u00f4\u017eem uvies\u0165 verziu, stav v\u00fdvoja alebo branche.<\/p>\n<p><em>Repository<\/em> &#8211; miesto s pripraven\u00fdmi modulmi a ich s\u00fabormi. Fyzick\u00e1 realiz\u00e1cia m\u00f4\u017ee by\u0165 napr\u00edklad FTP server, alebo zdie\u013ean\u00fd prie\u010dinok na po\u010d\u00edta\u010di v lok\u00e1lnej sieti. Podstatn\u00e9 je zvoli\u0165 si \u0161trukt\u00faru (t\u00e1 sa d\u00e1 prisp\u00f4sobova\u0165) a nahra\u0165 tam v\u0161etky moduly (popisn\u00e9 s\u00fabory) aj s ich artefaktmi.<\/p>\n<p><em>Cache<\/em> &#8211; lok\u00e1lna k\u00f3pia repozit\u00e1ra. Ide hlavne o optimaliz\u00e1ciu, kedy je repozit\u00e1r dostupn\u00fd len cez internet.<\/p>\n<p>To by mohlo by\u0165 na za\u010diatok v\u0161etko. Povedali sme si, \u017ee hlavnou \u00falohou Ivy je pripravova\u0165 s\u00fabory pod\u013ea grafu z\u00e1vislost\u00ed, ktor\u00e9 medzi nimi existuj\u00fa. Fyzicky sa to d\u00e1 dosiahnu\u0165 pomocou kni\u017enice Ivy a jej pr\u00edkazov a pripraven\u00e9ho repozit\u00e1ra so spr\u00e1vne zadefinovan\u00fdmi Ivy \u00fadajmi. V druhej polovici \u010dl\u00e1nku o Ivy sa pozrieme bli\u017e\u0161ie na tie pr\u00edkazy, a tie\u017e si povieme o \u010dere\u0161ni\u010dke na torte \u2013 konfigur\u00e1ci\u00e1ch.<\/p>","protected":false},"excerpt":{"rendered":"<p>Java m\u00e1 ve\u013ea spolo\u010dn\u00e9ho so svetom open source (mo\u017eno by sa dala pova\u017eova\u0165 za jeho s\u00fa\u010das\u0165). A ako tak\u00e1 m\u00e1 jednu vlastnos\u0165 charakteristick\u00fa pre open source \u2013 modularitu kni\u017en\u00edc. Pod t\u00fdmto pojmom mysl\u00edm to, \u017ee svet kni\u017en\u00edc tret\u00edch str\u00e1n, ktor\u00e9 v Jave viete pou\u017ei\u0165, je tvoren\u00fd obrovsk\u00fdm mno\u017estvom mal\u00fdch kni\u017en\u00edc. Aby ste mohli spusti\u0165 svoju [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-49","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/49","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=49"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/49\/revisions"}],"predecessor-version":[{"id":190,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/49\/revisions\/190"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=49"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=49"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}