{"id":11519,"date":"2015-12-11T17:05:48","date_gmt":"2015-12-11T16:05:48","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11519"},"modified":"2016-06-07T14:54:57","modified_gmt":"2016-06-07T12:54:57","slug":"ant-maven-e-gradle-scenari-di-build-automation-in-java","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/ant-maven-e-gradle-scenari-di-build-automation-in-java\/","title":{"rendered":"Ant, Maven e Gradle: scenari di build automation in Java"},"content":{"rendered":"<p>Una questione su cui si dibatte molto\u00a0oggigiorno nei forum e sui canali social\u00a0\u00e8\u00a0quale sia il miglior strumento di <em>build automation<\/em> per i progetti Java tra il tradizionale <a href=\"http:\/\/ant.apache.org\/\" target=\"_blank\">Ant<\/a>, l&#8217;innovativo <a href=\"https:\/\/maven.apache.org\/index.html\" target=\"_blank\">Maven <\/a>e l&#8217;emergente <a href=\"http:\/\/gradle.org\/\" target=\"_blank\">Gradle<\/a>. La problematica si \u00e8\u00a0accentuata da quando Gradle ha visto un recente incremento della sua popolarit\u00e0 \u00a0&#8211; gi\u00e0 \u00a0elevata in precedenza &#8211; grazie alla sua elezione come strumento ufficiale di building per <strong>Android Studio<\/strong>. Tanto per chiarire il contesto, intendiamo con <em>build automation<\/em> l&#8217;esecuzione in automatico di quella serie di operazioni che solitamente lo sviluppatore dovrebbe svolgere manualmente per trasformare il proprio codice sorgente in qualcosa di eseguibile: compilazione, packaging, testing, deployment, etc. Quanto detto va proiettato in senso lato: la build automation esiste nel web, nel mobile nonch\u00e8 nella programmazione desktop e quant&#8217;altro quindi parliamo di strumenti utili in generale.<\/p>\n<p>Tutti questi tool sono comunque\u00a0in evoluzione. Ant e Maven hanno rilasciato le ultime versioni pochi\u00a0mesi fa &#8211; rispettivamente: la\u00a01.9.6 il primo\u00a0a\u00a0luglio\u00a0e\u00a0la release\u00a03.3.3 ad aprile il secondo &#8211; mentre Gradle 2.8 ha visto la luce anche pi\u00f9 recentemente, il 20 ottobre scorso.<br \/>\nGradle sta conquistando grandi fette della popolazione di sviluppatori in quanto ha saputo accorpare importanti pregi degli altri due:<\/p>\n<ul>\n<li>come Ant, suddivide il processo di building in task pi\u00f9\u00a0piccoli e mirati (i ben noti <em>target<\/em> di Ant) concatenabili tra loro ed eseguibili in base ad un sistema di precedenze;<\/li>\n<li>come Maven, permette di basare il lavoro su schemi predefiniti secondo il principio della <em>convention-over-configuration<\/em> nonch\u00e8 di gestire in maniera automatica e molto efficiente le dipendenze del progetto.<\/li>\n<\/ul>\n<p>Oltre a ci\u00f2, Gradle ha piazzato ulteriori mosse vincenti come l&#8217;introduzione di <strong>Groovy<\/strong>\u00a0al posto di\u00a0XML per la definizione dei task, rendendo molto pi\u00f9 flessibile la definizione delle operazioni da svolgere, nonch\u00e8 l&#8217;ottima integrazione con Ant e Maven che evita\u00a0agli sviluppatori di perdere il tanto lavoro gi\u00e0 \u00a0svolto agevolandone la conversione.<br \/>\nIl successo di Gradle mette in luce anche come la build automation stia cambiando nel tempo. La sola gestione delle funzionalit\u00e0 \u00a0basilari come compilazione e packaging non \u00e8\u00a0pi\u00f9 sempre sufficiente. Molti contesti di sviluppo richiedono che un build tool possa gestire efficientemente progetti realizzati in pi\u00f9 linguaggi di programmazione, preveda sin dall&#8217;inizio la pianificazione di strategie di testing e permetta di realizzare artefatti finali in versioni diverse per usi vari.<\/p>\n<p>Ci\u00f2 sarebbe fattibile anche con Maven e Ant ma Gradle permette di farlo con dei build file manutenibili e sintetici, seguendo schemi preimpostati in generale ma personalizzabili all&#8217;occorrenza.<br \/>\nNon far\u00e0 \u00a0certo dimenticare Ant e Maven ma Gradle appare sempre pi\u00f9 una soluzione buona per tutti gli usi.<\/p>\n<p>E voi ne avete gi\u00e0 apprezzato i vantaggi oppure avete idee diverse ? Vi aspettiamo nei commenti.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una questione su cui si dibatte molto\u00a0oggigiorno nei forum e sui canali social\u00a0\u00e8\u00a0quale sia il miglior strumento&#8230;<\/p>\n","protected":false},"author":561,"featured_media":11576,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[534],"tags":[1552,1574,1575,1554,1553],"class_list":["post-11519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-ant","tag-build-automation-android","tag-build-automation-android-studio","tag-gradle","tag-maven"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11519"}],"version-history":[{"count":8,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11519\/revisions"}],"predecessor-version":[{"id":12854,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11519\/revisions\/12854"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11576"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}