{"id":69,"date":"2014-11-03T20:47:14","date_gmt":"2014-11-03T19:47:14","guid":{"rendered":""},"modified":"2018-09-17T21:53:38","modified_gmt":"2018-09-17T19:53:38","slug":"unifikacia-softverovych-projektov-maven","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/unifikacia-softverovych-projektov-maven\/","title":{"rendered":"Unifik\u00e1cia softv\u00e9rov\u00fdch projektov &#8211; Maven"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/d4f56sf54d.png\" alt=\"Obr\u00e1zok\" width=\"300\" height=\"69\" \/>Som toho n\u00e1zoru, \u017ee ak\u00fdko\u013evek stredne ve\u013ek\u00fd alebo ve\u013ek\u00fd softv\u00e9rov\u00fd projekt mus\u00ed za\u010da\u0165 pou\u017e\u00edva\u0165 automatiz\u00e1ciu, inak je ods\u00faden\u00fd na probl\u00e9my. Pod pojmom automatiz\u00e1cia m\u00e1m na mysli, \u017ee opakuj\u00face sa kroky nebud\u00fa vykon\u00e1van\u00e9 manu\u00e1lne, ale pomocou softv\u00e9rov\u00e9ho n\u00e1stroja, resp. ur\u010dit\u00e9 \u00fakony sa za\u010dn\u00fa dia\u0165 automaticky bez toho, aby ich musel ru\u010dne sp\u00fa\u0161\u0165a\u0165 \u010dlovek. N\u00e1strojov, ktor\u00e9 sa daj\u00fa na automatiz\u00e1ciu pou\u017ei\u0165, je mnoho. Dnes si povieme nie\u010do o n\u00e1stroji <a href=\"https:\/\/maven.apache.org\/\">Maven<\/a>, ktor\u00fd je \u0161peci\u00e1lny t\u00fdm, \u017ee m\u00e1 v sebe zabudovan\u00fd manu\u00e1l na automatiz\u00e1ciu.<!--more--><!--break--><\/p>\n<p>Maven je n\u00e1stroj, ktor\u00fd vie naraz sp\u013a\u0148a\u0165 nieko\u013eko \u00faloh:<\/p>\n<ul>\n<li>automatizova\u0165 r\u00f4zne \u010dinnosti, ktor\u00e9 s\u00favisia s v\u00fdvojom softv\u00e9ru<\/li>\n<li>efekt\u00edvne spravova\u0165 z\u00e1vislosti projektov (ak vyv\u00edjate viacero projektov naraz) alebo z\u00e1vislosti na kni\u017eniciach tret\u00edch str\u00e1n<\/li>\n<li>definova\u0165 \u0161trukt\u00faru projektu a t\u00fdm zabezpe\u010di\u0165, \u017ee aj nesk\u00fasen\u00fd tvorca vyrob\u00ed projekt bez ve\u013ek\u00fdch ch\u00fdb, a z\u00e1rove\u0148 v\u0161etky projekty spravovan\u00e9 Mavenom s\u00fa jednotn\u00e9<\/li>\n<\/ul>\n<p>Pravdupovediac prv\u00e9 2 body z predch\u00e1dzaj\u00faceho zoznamu nie s\u00fa a\u017e tak\u00e1 novinka. Dnes u\u017e existuje ve\u013ea n\u00e1strojov, ktor\u00e9 umo\u017e\u0148uj\u00fa robi\u0165 to ist\u00e9. Vo svete Javy, odkia\u013e Maven poch\u00e1dza, je asi najzn\u00e1mej\u0161\u00ed jeho predchodca Ant s roz\u0161\u00edren\u00edm Ivy pre spravovanie z\u00e1vislost\u00ed. To, \u010do odli\u0161uje Maven od ve\u013ea jeho predchodcov, je tret\u00ed bod. Medzi Mavenom a Antom je toti\u017e tak\u00fd rozdiel ako medzi v\u00fdrobnou linkou a diel\u0148ou, ktor\u00e1 obsahuje v\u0161etky z\u00e1kladn\u00e9 n\u00e1stroje na pr\u00e1cu. Pri v\u00fdrobnej linke sta\u010d\u00ed vedie\u0165 ako ju spusti\u0165, kde vlo\u017ei\u0165 vstupy a odkia\u013e vypadn\u00fa v\u00fdstupy (zjednodu\u0161ene povedan\u00e9). Pri dielni s n\u00e1strojmi potrebujete pozna\u0165 cel\u00fd proces v\u00fdroby, aby ste pomocou z\u00e1kladn\u00fdch n\u00e1strojov vyrobili po\u017eadovan\u00fd v\u00fdrobok.<\/p>\n<p>Ant je pr\u00e1ve t\u00e1 diel\u0148a pln\u00e1 n\u00e1strojov. Obsahuje ich naozaj mnoho, ale nepon\u00faka \u017eiaden n\u00e1vod, ako da\u0165 produkt cel\u00fd dokopy. A tak, k\u00fdm z\u00edskate nejak\u00fd v\u00fdsledok, mus\u00edte urobi\u0165 mno\u017estvo rozhodnut\u00ed. Maven na rozdiel od toho pon\u00faka takzvan\u00fd <em>Default Lifecycle<\/em>. Je to v podstate zostavovac\u00ed skript, ktor\u00fd Maven obsahuje s\u00e1m v sebe a \u0161tandardne sp\u00fa\u0161\u0165a pre ka\u017ed\u00fd projekt. Samozrejme, tak\u00fd skript mus\u00ed vedie\u0165, kde ma n\u00e1js\u0165 vstupy, kde odlo\u017ei\u0165 v\u00fdstupy a \u010do presne spravi\u0165. A tu prich\u00e1dzame k druh\u00e9mu pojmu, ktor\u00fd sa via\u017ee na Maven: <em>convention over configuration<\/em> (zvyklosti nad nastaveniami). Maven toti\u017e predpoklad\u00e1, \u017ee zdrojov\u00e9 k\u00f3dy n\u00e1jde v prie\u010dinku \u201esrc\u201c, testy v prie\u010dinku \u201etest\u201c a v\u00fdsledok m\u00e1 odlo\u017ei\u0165 do adres\u00e1ra \u201etarget\u201c, at\u010f. Inak povedan\u00e9, nemus\u00edm Mavenu hovori\u0165, kde \u010do m\u00e1 n\u00e1js\u0165, ale sk\u00f4r prisp\u00f4sobi\u0165 mu svoj projekt (aj ke\u010f opa\u010dn\u00fd pr\u00edpad je tie\u017e mo\u017en\u00fd).<\/p>\n<p>Na prv\u00fd poh\u013ead to m\u00f4\u017ee vyzera\u0165 ako obmedzovanie, ale v skuto\u010dnosti je to celkom prospe\u0161n\u00e9. V prvom rade v\u00e1m Maven d\u00e1va na v\u00fdber. M\u00f4\u017eete pou\u017ei\u0165 jeho default \u0161trukt\u00faru, alebo m\u00f4\u017eete pou\u017ei\u0165 svoju, ale mus\u00edte ho nakonfigurova\u0165 (napr. pri Ante m\u00f4\u017eete pou\u017ei\u0165 \u013eubovo\u013en\u00fa \u0161trukt\u00faru, ale st\u00e1le mus\u00edte Ant nakonfigurova\u0165). Za \u010fal\u0161ie v\u00e1m to pom\u00f4\u017ee navrhn\u00fa\u0165 \u0161trukt\u00faru, ktor\u00e1 je pou\u017e\u00edvan\u00e1 tis\u00edckami projektov vo svete a celkom \u00faspe\u0161ne (ur\u010dite v\u00e1m to umo\u017en\u00ed vyhn\u00fa\u0165 sa r\u00f4znym antipatternom, ktor\u00fdch sa d\u00e1 \u013eahko dopusti\u0165). V neposlednom rade to unifikuje v\u00e1\u0161 projekt s in\u00fdmi. To sa vyplat\u00ed v\u00e1m, ak by ste sa dostali k in\u00e9mu projektu, alebo naopak niekomu in\u00e9mu, kto by sa dostal k v\u00e1\u0161mu. A na z\u00e1ver treba poveda\u0165, \u017ee to zr\u00fdch\u013euje nasadenie Mavenu na nejak\u00fd projekt. Ak toti\u017e m\u00e1te t\u00fa spr\u00e1vnu \u0161trukt\u00faru, tak v\u00e1m sta\u010d\u00ed Maven xml popisn\u00fd s\u00fabor, ktor\u00fd obsahuje nieko\u013eko jednotiek riadkov s\u00faborov a to je v\u0161etko.<\/p>\n<p>Maven je teda n\u00e1stroj, ktor\u00fd u\u017e v sebe obsahuje hne\u010f po nain\u0161talovan\u00ed konfigur\u00e1ciu, ktor\u00fa viete okam\u017eite pou\u017ei\u0165 pre v\u00e1\u0161 projekt. Na to, aby ste ho mohli za\u010da\u0165 pou\u017e\u00edva\u0165, potrebujete vytvori\u0165 tzv. POM s\u00fabor (pom.xml), \u010do je skratka od Project Object Model. Tento s\u00fabor by mal popisova\u0165 v\u00e1\u0161 projekt, ale len ve\u013emi mal\u00e1 sada z toho, \u010do m\u00f4\u017ee obsahova\u0165, je povinn\u00e1.<\/p>\n<p>Medzi tieto z\u00e1kladn\u00e9 \u00fadaje patria tzv. koordin\u00e1ty projektu, \u010do je \u0161tvorica \u00fadajov, ktor\u00e1 obsahuje:<\/p>\n<ul>\n<li>n\u00e1zov skupiny va\u0161ich projektov (naj\u010dastej\u0161ie nie\u010do ako com.example.projekt)<\/li>\n<li>n\u00e1zov v\u00e1\u0161ho projektu (napr\u00edklad kalkulacka)<\/li>\n<li>verziu (napr\u00edklad 1.1.0)<\/li>\n<li>typ projektu (napr\u00edklad jar)<\/li>\n<\/ul>\n<p>Na z\u00e1klade t\u00fdchto \u00fadajov je Maven schopn\u00fd v\u00e1\u0161 projekt vypublikova\u0165 a op\u00e4\u0165 n\u00e1js\u0165 v repozit\u00e1ry. Ako som u\u017e spomenul vy\u0161\u0161ie, Maven obsahuje tie\u017e n\u00e1stroje na spravovanie z\u00e1vislost\u00ed. O problematike z\u00e1vislost\u00ed som u\u017e hovoril v \u010dl\u00e1nkoch o <a href=\"https:\/\/spireng.sk\/en\/content\/spletite-zavislosti-ivy\/\">Apache Ivy<\/a>. Podstata je, \u017ee v\u00e1\u0161 projekt pou\u017e\u00edva v\u00fdstupy in\u00fdch projektov, a tie zase m\u00f4\u017eu z\u00e1visie\u0165 na in\u00fdch projektoch, at\u010f. Maven zabezpe\u010d\u00ed, \u017ee v\u0161etky potrebn\u00e9 kni\u017enice pre v\u00e1\u0161 projekt budete ma\u0165 k dispoz\u00edcii. V POM s\u00fabore na to sl\u00fa\u017ei \u0161peci\u00e1lna \u010das\u0165, kde definujete z\u00e1vislosti v\u00e1\u0161ho projektu a to presne na z\u00e1klade \u00fadajov vymenovan\u00fdch vy\u0161\u0161ie. Maven sa potom prip\u00e1ja na repozit\u00e1r, odkia\u013e ich s\u0165ahuje do v\u00e1\u0161ho lok\u00e1lneho repozit\u00e1ra (t.j. v\u00e4\u010d\u0161inou na disk v\u00e1\u0161ho po\u010d\u00edta\u010da), a odtia\u013e napr\u00edklad pribal\u00ed ako kni\u017enicu do v\u00e1\u0161ho jar-ka alebo war-ka.<\/p>\n<p>Je nutn\u00e9 poveda\u0165, \u017ee Maven je pomerne mocn\u00fd n\u00e1stroj, ale nie s\u00e1m o sebe. V skuto\u010dnosti Maven ako tak\u00fd toho ve\u013ea nevie. Hlavne dok\u00e1\u017ee z\u00edska\u0165 z\u00e1vislosti, a sp\u00fa\u0161\u0165a\u0165 pluginy. Pr\u00e1ve tie pluginy s\u00fa to, \u010do robia z Mavenu v\u0161estrann\u00fd n\u00e1stroj. Existuje ich obrovsk\u00e9 mno\u017estvo pre r\u00f4zne \u00fa\u010dely. Sta\u010d\u00ed ich uvies\u0165 v POM s\u00fabore (aj s pr\u00edslu\u0161nou konfigur\u00e1ciou) a Maven si ich automaticky stiahne a pou\u017eije. Tak vlastne dok\u00e1\u017ee automaticky roz\u0161irova\u0165 akcie, ktor\u00e9 je schopn\u00e9 vykona\u0165.<\/p>\n<p>Toto v\u0161etko s\u00fa len z\u00e1kladn\u00e9 inform\u00e1cie. Na pln\u00e9 pochopenie Mavenu odpor\u00fa\u010dam niektor\u00fa z kn\u00edh, ktor\u00e9 o \u0148om boli nap\u00edsan\u00e9. Ka\u017edop\u00e1dne je Maven n\u00e1stroj, ktor\u00fd vo svete Java Enterprise rie\u0161en\u00ed m\u00f4\u017ee by\u0165 len ve\u013emi \u0165a\u017eko prehliadan\u00fd.<\/p>","protected":false},"excerpt":{"rendered":"<p>Som toho n\u00e1zoru, \u017ee ak\u00fdko\u013evek stredne ve\u013ek\u00fd alebo ve\u013ek\u00fd softv\u00e9rov\u00fd projekt mus\u00ed za\u010da\u0165 pou\u017e\u00edva\u0165 automatiz\u00e1ciu, inak je ods\u00faden\u00fd na probl\u00e9my. Pod pojmom automatiz\u00e1cia m\u00e1m na mysli, \u017ee opakuj\u00face sa kroky nebud\u00fa vykon\u00e1van\u00e9 manu\u00e1lne, ale pomocou softv\u00e9rov\u00e9ho n\u00e1stroja, resp. ur\u010dit\u00e9 \u00fakony sa za\u010dn\u00fa dia\u0165 automaticky bez toho, aby ich musel ru\u010dne sp\u00fa\u0161\u0165a\u0165 \u010dlovek. N\u00e1strojov, ktor\u00e9 sa [&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-69","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/69","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=69"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/69\/revisions"}],"predecessor-version":[{"id":166,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/69\/revisions\/166"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}