{"id":71,"date":"2015-01-03T19:58:36","date_gmt":"2015-01-03T18:58:36","guid":{"rendered":""},"modified":"2018-09-17T21:53:29","modified_gmt":"2018-09-17T19:53:29","slug":"koliska-pre-vas-softver","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/koliska-pre-vas-softver\/","title":{"rendered":"Kol\u00edska pre v\u00e1\u0161 softv\u00e9r"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/dfs65daf46.jpg\" alt=\"Obr\u00e1zok\" width=\"200\" height=\"215\" \/>Automatiz\u00e1cii som sa na str\u00e1nkach tohto blogu venoval u\u017e nieko\u013ekokr\u00e1t. O tom, \u017ee to v\u00f4bec nie je okrajov\u00e1 t\u00e9ma v oblasti v\u00fdvoja softv\u00e9ru sved\u010d\u00ed aj ve\u013ek\u00e9 mno\u017estvo n\u00e1strojov, pomocou ktor\u00fdch ju viete vo svojom projekte realizova\u0165. Je tu v skuto\u010dnosti u\u017e tak dlho, \u017ee sa d\u00e1 hovori\u0165 o gener\u00e1ci\u00e1ch jej n\u00e1strojov. Dnes sa pozrieme na jeden tak\u00fdto z tej nov\u0161ej gener\u00e1cie. N\u00e1stroj <a href=\"http:\/\/www.gradle.org\/\">Gradle<\/a> op\u00edsal vo svojej knihe <a href=\"http:\/\/www.bookdepository.com\/Gradle-Action-Benjamin-Muschko\/9781617291302\">Gradle in Action<\/a> Bejamin Muschko.<!--more--><!--break--><\/p>\n<p>Kniha za\u010d\u00edna, celkom logicky, kapitolou o tom, \u010do to automatiz\u00e1cia je a na \u010do je dobr\u00e1. Ak ste o nej doteraz nevedeli, je to kapitola ide\u00e1lna pre v\u00e1s. Ak u\u017e viete, o \u010do tu ide, st\u00e1le je dobr\u00e9 si d\u00f4vody zrekapitulova\u0165 a nazbiera\u0165 nejak\u00e9 argumenty do diskusi\u00ed s kolegami, ktor\u00ed tak\u00e9to knihy ne\u010d\u00edtaj\u00fa. Ako hlavn\u00e9 v\u00fdhody uv\u00e1dza:<\/p>\n<ol>\n<li>odb\u00faranie manu\u00e1lnej pr\u00e1ce;<\/li>\n<li>to, \u017ee v\u0161etky zostavenia s\u00fa v\u017edy rovnak\u00e9, a teda produkuj\u00fa rovnak\u00fd v\u00fdsledok (\u017eiadna odch\u00fdlka typu: \u201eJo\u017eo zabudol nakop\u00edrova\u0165 pred z<span style=\"background: transparent;\">ostav<\/span><span style=\"background: transparent;\">e<\/span><span style=\"background: transparent;\">n\u00edm<\/span> spr\u00e1vny konfigura\u010dn\u00fd s\u00fabor.\u201c);<\/li>\n<li>zostavenia s\u00fa \u013eahko prenosite\u013en\u00e9 do in\u00e9ho prostredia.<\/li>\n<\/ol>\n<p>V kapitole nech\u00fdba zoznam existuj\u00facich n\u00e1strojov na automatiz\u00e1ciu. Pre Javu v takomto zozname ur\u010dite nem\u00f4\u017eu ch\u00fdba\u0165 Ant a Maven. Gradle sa v podstate d\u00e1 definova\u0165 ako nov\u00e1 gener\u00e1cia, ktor\u00e1 si od oboch po\u017ei\u010diava nie\u010do. \u010co to teda vlastne je?<\/p>\n<p>Gradle je n\u00e1stroj, ktor\u00fd umo\u017e\u0148uje vytv\u00e1ra\u0165 automatick\u00e9 zostavenia. Tie s\u00fa pop\u00edsan\u00e9 pomocou jazyka <a href=\"http:\/\/groovy.codehaus.org\/\">Groovy<\/a>, \u010do je nov\u00fd dynamick\u00fd jazyk postaven\u00fd pre JVM. Je to jazyk, ktor\u00fd sk\u00f4r pripom\u00edna skriptovanie ako kompilovan\u00e9 jazyky, ale v r\u00e1mci neho m\u00f4\u017eete pou\u017e\u00edva\u0165 syntax Javy, tak\u017ee to, ako bude nakoniec vyzera\u0165 k\u00f3d, je na v\u00e1s. Gradle ale ku Groovy prid\u00e1va tzv. Domain Specific Language (skratka DSL). To znamen\u00e1, \u017ee okrem klasickej syntaxe Groovy m\u00f4\u017eete v Gradle skripte pou\u017e\u00edva\u0165 aj pr\u00edkazy, ktor\u00e9 maj\u00fa zmysel len v oblasti zostavovania softv\u00e9ru. Inak povedan\u00e9, Gradle obohatilo Groovy o \u010fal\u0161ie pr\u00edkazy, ktor\u00fdmi jednoducho viete definova\u0165 zostavenia.<\/p>\n<p>Groovy si od ka\u017ed\u00e9ho zo svojich hlavn\u00fdch predchodcov (Ant, Maven) nie\u010do zobral. Od <span style=\"background: transparent;\">Antu mo\u017enos\u0165 <\/span>procedur\u00e1lneho definovania toho, \u010do sa bude dia\u0165. Teda viete zadefinova\u0165 presn\u00e9 poradie jednotliv\u00fdch krokov. Od Mavenu Gradle prebral pr\u00edstup <em>conventions over configurations<\/em>. To znamen\u00e1, \u017ee ve\u013ea vec\u00ed je v Gradle preddefinovan\u00fdch (t.z. ak nejak\u00fa \u0161tandardn\u00fa <span style=\"background: transparent;\">premenn\u00fa zostavenia<\/span> \u2013 napr. cesta k prie\u010dinku so zdrojov\u00fdmi k\u00f3dmi \u2013 nezadefinujete, m\u00e1 automaticky svoju default hodnotu). V\u010faka tomu plat\u00ed, \u017ee viacer\u00e9 projekty spravovan\u00e9 Gradle bud\u00fa vyzera\u0165 rovnako, \u010do u\u013eah\u010d\u00ed prechod v\u00fdvoj\u00e1ra od jedn\u00e9ho k druh\u00e9mu. Z\u00e1rove\u0148 to napom\u00e1ha pri budovan\u00ed projektu, kde u\u017e v\u00fdvoj\u00e1r dostane nejak\u00fd \u00favodn\u00fd predpis, ako by to malo vyzera\u0165 a nemus\u00ed vym\u00fd\u0161\u013ea\u0165 vlastn\u00fa \u0161trukt\u00faru prie\u010dinkov. To s\u00fa tie\u017e hlavn\u00e9 v\u00fdhody spom\u00ednan\u00e9 \u010dasto pri Mavene.<\/p>\n<p>\u010co sa t\u00fdka toho, ako je proces v Gradle definovan\u00fd, tak ten m\u00e1 \u0161trukt\u00faru acyklick\u00e9ho grafu, kde ka\u017ed\u00e1 \u00faloha (task) m\u00e1 povedan\u00e9, na ktorom tasku z\u00e1vis\u00ed a teda, ktor\u00fd task sa mus\u00ed vykona\u0165 pred n\u00edm. N\u00e1sledne je potrebn\u00e9 len spusti\u0165 Gradle s posledn\u00fdm taskom, ktor\u00fd m\u00e1 by\u0165 vykonan\u00fd a Gradle sa postar\u00e1 o to, aby boli vykonan\u00e9 aj v\u0161etky tasky, na ktor\u00fdch dan\u00fd task z\u00e1vis\u00ed a takto rekurz\u00edvne a\u017e k za\u010diatku cel\u00e9ho grafu z\u00e1vislosti. O t\u00fdchto aspektoch Gradle pojedn\u00e1va z\u00e1ver prvej kapitoly z knihy. Autor sa sna\u017e\u00ed vysvetli\u0165, v \u010dom je Gradle podobn\u00fd svoj\u00edm predchodcom a v \u010dom sa l\u00ed\u0161i. Nech\u00fdba ani <span style=\"background: transparent;\">n\u00e1vod <\/span><span style=\"background: transparent;\">ako <\/span><span style=\"background: transparent;\">migrova\u0165<\/span> existuj\u00face projekty v Ant-e alebo Mavene na Gradle.<\/p>\n<p>Druh\u00e1 kapitola knihy sa venuje osobitn\u00fdm t\u00e9mam ako je testovanie, spr\u00e1va z\u00e1vislost\u00ed alebo pluginy pre Gradle. Vo v\u0161etkom tomto sa Gradle zna\u010dne podob\u00e1 na Maven, preto\u017ee ma integrovan\u00fa podporu na spravovanie z\u00e1vislost\u00ed alebo tie\u017e je do neho mo\u017en\u00e9 in\u0161talova\u0165 pluginy. Tak\u00fdto nain\u0161talovan\u00fd plugin potom dok\u00e1\u017ee roz\u0161\u00edri\u0165 DSL Gradle (napr\u00edklad plugin pre Android prinesie tasky a konfigur\u00e1cie ur\u010den\u00e9 pre Android projekty) a tie\u017e prinesie mno\u017einu zmyslupln\u00fdch default hodn\u00f4t, tak\u017ee u\u017e len treba vytvori\u0165 projekt tak, aby sp\u013a\u0148al tieto v\u00fdchodzie hodnoty a v\u0161etko bude tak trochu magicky fungova\u0165.<\/p>\n<p>Tretia kapitola knihy sa venuje \u010fal\u0161\u00edm komplikovanej\u0161\u00edm t\u00e9mam ako je zostavovanie projektov, ktor\u00fdch zdrojov\u00e9 k\u00f3dy s\u00fa p\u00edsan\u00e9 r\u00f4znymi jazykmi. Medzi \u010fal\u0161ie tak\u00e9ho t\u00e9my napr\u00edklad patr\u00ed podpora r\u00f4znych IDE pre Gradle, zav\u00e1dzanie Gradle do Continues Integration serverov alebo zostavovanie a publikovanie artefaktov do repozit\u00e1rov (Gradle dok\u00e1\u017ee bez probl\u00e9mov spolupracova\u0165 s Maven aj Apache Ivy repozit\u00e1rmi).<\/p>\n<p>Gradle ako n\u00e1stroj m\u00e1 pred sebou jednozna\u010dne perspekt\u00edvnu bud\u00facnos\u0165. Vyzer\u00e1, \u017ee sa mu podarilo pou\u010di\u0165 sa z dobr\u00fdch aj zl\u00fdch vlastnost\u00ed jeho predchodcov a prida\u0165 nie\u010do nov\u00e9 navy\u0161e. Ost\u00e1va tu samozrejme probl\u00e9m toho, \u017ee je \u00faplne nov\u00fd n\u00e1stroj s novou syntaxov. Ak ste doteraz pou\u017e\u00edvali napr. Ant, tak prv\u00fd poh\u013ead na Gradle m\u00f4\u017ee p\u00f4sobi\u0165 trochu odstra\u0161uj\u00faco. Groovy nie je XML jazyk, ani Java (aj ke\u010f sa tak vie tv\u00e1ri\u0165). Tie\u017e zvykn\u00fa\u0165 si na DSL a model acyklick\u00e9ho grafu nejak\u00fd \u010das trv\u00e1. To u\u017e je ale cena za prechod na nov\u00e9 syst\u00e9my, ktor\u00e9 s\u00fa postaven\u00e9 na in\u00fdch princ\u00edpoch.<\/p>\n<p>U\u017e som si tak trochu zvykol, \u017ee knihy zo s\u00e9rie \u201e\u2026 in Action\u201c maj\u00fa svoju kvalitu a ani pri tejto to nie je inak. Kniha za\u010d\u00edna spr\u00e1vnym \u00favodom, ktor\u00fd by v\u00e1s mal navnadi\u0165 na to, pre\u010do m\u00e1 zmysel \u010d\u00edta\u0165 \u010falej. Postupne potom prech\u00e1dza od jednoduch\u00fdch t\u00e9m k zlo\u017eitej\u0161\u00edm a v pr\u00edlohe tie\u017e nech\u00fdba r\u00fdchlokurz Groovy, ktor\u00fd je v pr\u00edpade Gradle ve\u013emi prospe\u0161n\u00fd.<\/p>","protected":false},"excerpt":{"rendered":"<p>Automatiz\u00e1cii som sa na str\u00e1nkach tohto blogu venoval u\u017e nieko\u013ekokr\u00e1t. O tom, \u017ee to v\u00f4bec nie je okrajov\u00e1 t\u00e9ma v oblasti v\u00fdvoja softv\u00e9ru sved\u010d\u00ed aj ve\u013ek\u00e9 mno\u017estvo n\u00e1strojov, pomocou ktor\u00fdch ju viete vo svojom projekte realizova\u0165. Je tu v skuto\u010dnosti u\u017e tak dlho, \u017ee sa d\u00e1 hovori\u0165 o gener\u00e1ci\u00e1ch jej n\u00e1strojov. Dnes sa pozrieme na [&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-71","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/71","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=71"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/71\/revisions"}],"predecessor-version":[{"id":164,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/71\/revisions\/164"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=71"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=71"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=71"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}