Apache Maven

1,651 views

Published on

Apache Maven è un software per la gestione di progetti. Basato sul concetto di project object model (POM), un punto centralizzato di informazione, Maven può gestire la build, i report la documentazione, e molto altro.

Published in: Technology

Apache Maven

  1. 1. LINUXDAY 2012 www.linuxday.it Apache Maven Tarin GamberiniFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 1
  2. 2. LINUXDAY 2012 www.linuxday.it Licence This document is distribuited under the following licence: Attribution­NonCommercial­ShareAlike 3.0 Unported (CC BY­NC­SA 3.0) Attributing to the author must be done by citing authors name and surname: Tarin Gamberini Information about this licence are available at: http://creativecommons.org/licenses/by­nc­sa/3.0/Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 2
  3. 3. LINUXDAY 2012 www.linuxday.it Argomenti Introduzione – Apache Maven... Cosè? – Convention over Configuration Principali caratteristiche – Project Object Model – Local Repository – Dependency – Build Lifecycle – Build Profiles Oltre un build tool – Site Generation – Maven Repository Manager – Maven DocBook pluginFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 3
  4. 4. LINUXDAY 2012 www.linuxday.it Chi è Tarin Gamberini Lavora da sempre con tecnologie Java-based free ed opensource presso la Regione Emilia- Romagna E Consigliere presso il Java User Group Padova e si occupa di organizzazione e promozione di meeting a favore della comunità Java E membro, e co-fondatore, della Commissione Ingegneria dellInformazione presso lOrdine degli Ingegneri di Ferrara Si interessa di Object Oriented Design, Design Patterns, Build Automation, Testing e Continuous IntegrationFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 4
  5. 5. LINUXDAY 2012 www.linuxday.it IntroduzioneFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 5
  6. 6. LINUXDAY 2012 www.linuxday.it Apache Maven... Cosè? Dipende dai punti di vista Un build tool – Preprocessing, compilation, packaging, testing, distribution – Cera già Apache Ant Un project management tool – Build tool più evoluto – Esegue reports, genera un sito web del progetto, agevola la comunicazione fra i membri di un working team – Estendibile grazie ad architettura a pluginFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 6
  7. 7. LINUXDAY 2012 www.linuxday.it Apache Maven... Cosa offre? Prima – Checkout dal Revision Control System (RCS) – Cosa serve al progetto per compilare? – Quali librerie devono essere scaricate? – Dove mettere tali librerie? – Quali operazioni sono eseguibili con la procedura di build? – Come compilare, impacchettare, testare, distribuire il progetto? – In quali directory sono creati i “prodotti” della procedura di build? – Pochi minuti :-) Qualche ora :-( Molte ore :-((( Maven offre uninterfaccia comune di progettazione del build – Checkout dal RCS mvn installFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 7
  8. 8. LINUXDAY 2012 www.linuxday.it Convention over Configuration Sistemi, librerie, framework, ecc... configurabili dovrebbero essere già progettati con una configurazione di default ragionevole, affinché, semplicemente, funzionino subito – Configurare solo ciò che devia dal comportamento convenzionale – Semplifica la programmazione senza perdere necessariamente in flessibilità Risposta alla crescente complessità dei framework – Molti file, ognuno con molte impostazioni: filename, dirname, URL, mapping, db, gui, … – JavaBeans (since JDK 1.1), servono file di configurazione? Paradigma di progettazione ormai adottato da molti framework: Spring, Ruby on Rails, EJB, Grails, Zend Framework, Pylons, ecc...Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 8
  9. 9. LINUXDAY 2012 www.linuxday.it Licenza Apache Maven è distribuito sotto Apache License, Version 2.0 Mai sentita? Alla pagina http://www.gnu.org/licenses/license-list.it.html Apache License, Version 2.0 è una licenza di software libero, compatibile con la versione 3 della GNU GPL.Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 9
  10. 10. LINUXDAY 2012 www.linuxday.it Installazione Andare a http://maven.apache.org/download.html Necessario avere già installato Java Development Kit (JDK) Scaricare Maven e decomprimerlo in una cartella /usr/local/apache­maven Creare (export) le variabili dambiente M2_HOME=/usr/local/apache­maven/apache­maven­X.Y.Z M2=$M2_HOME/bin Aggiungere (export) al path PATH=$M2:$PATH Assicurarsi di avere nel path la variabile dambiente JAVA_HOME che punta alla JDK Verificare la corretta installazione mvn ­­versionFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 10
  11. 11. LINUXDAY 2012 www.linuxday.it Principali caratteristicheFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 11
  12. 12. LINUXDAY 2012 www.linuxday.it Il Project Object Model (POM) Il POM è descritto in un file pom.xml La presenza di un file pom.xml in una directory definisce questultima come contenente un progetto Maven Nel pom.xml è dichiarato lidentità e la struttura di un progetto – Identità definita tramite coordinate – Raramente è stand alone – Solitamente dipende da altri progetti – Solitamente eredita configurazioni dal parent POM – Può includere sotto progetti detti moduli (Analogo di un Ant build.xml o di di un Makefile)Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 12
  13. 13. LINUXDAY 2012 www.linuxday.it Il POM più semplice <project>     <modelVersion>4.0.0</modelVersion>     <groupId>com.taringamberini</groupId>     <artifactId>linuxdaydemo</artifactId>     <version>1.0.0</version> </project>Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 13
  14. 14. LINUXDAY 2012 www.linuxday.it Il POM più semplice <project>     <modelVersion>4.0.0</modelVersion>     <groupId>com.taringamberini</groupId>     <artifactId>linuxdaydemo</artifactId>     <version>1.0.0</version> </project> Identità del progetto definita tramite coordinate (groupId, artifactId, version) = (x, y, z)Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 14
  15. 15. LINUXDAY 2012 www.linuxday.it Il POM più semplice La struttura del progetto segue una convenzione Il comportamento della build è groupId una convenzione artifactId La convenzione è ereditata dal super POM Super POM Ereditarietà com.taringamberini linuxdaydemo 1.0.0Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 15
  16. 16. LINUXDAY 2012 www.linuxday.it Local Repository Maven crea nella directory utente la directory .m2 .m2/settings.xml Un file contenente configurazioni specifiche dellutente relative ad autenticazione, repositories, ed altre informazioni per customizzare il comportamento di Maven .m2/repository/ La directory contenente il repository locale di MavenFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 16
  17. 17. LINUXDAY 2012 www.linuxday.it Local Repository Maven cerca le dipendenze (librerie) nel repository locale PC 1 pom.xml 2 3 local repositoryFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 17
  18. 18. LINUXDAY 2012 www.linuxday.it Local Repository Maven cerca le dipendenze (librerie) nel repository locale Se non la trova in locale Maven cerca in un repository remoto e la immagazzina nel repository locale !!! Maven ha bisogno della connessione ad Internet PC Internet 1 pom.xml 3 2 5 remote 4 repository local repositoryFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 18
  19. 19. LINUXDAY 2012 www.linuxday.it Dipendenze del Progetto Quando un progetto necessita di una libreria si dice che il progetto ha una dipendenza Compile (default) – Disponibili in tutti i classpath, sono impacchettate Provided – Disponibili nel compile classpath (non nel runtime), non sono impacchettate, non sono transitive (per es. Servlet API jar) Runtime – No compile classpath, disponibile nei runtime classpath, anche per lesecuzione dei test (per es. JDBC API jar) Test – Solo nelle fasi compile ed test execution, non sono transitive System – File system locale (sconsigliato: preferire un Maven repository)Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 19
  20. 20. LINUXDAY 2012 www.linuxday.it Dipendenze di Progetto junit junit Le dipendenze si dichiarano nel pom.xml 3.8.1 <project>   ... com.taringamberini   <dependencies> linuxdaydemo     <dependency> 1.0.0       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>3.8.1</version>     </dependency>     ...   </dependencies>   ...Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 20
  21. 21. LINUXDAY 2012 www.linuxday.it Dipendenze di Progetto junit junit Le dipendenze hanno uno scope 3.8.1 <project> test   ... com.taringamberini   <dependencies> linuxdaydemo     <dependency> 1.0.0       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>3.8.1</version>       <scope>test</scope>     </dependency>     ...   </dependencies>Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 21
  22. 22. LINUXDAY 2012 www.linuxday.it Dipendenze transitive Una dipendenza transitiva è una dipendenza di una dipendenza it.jugpadova jugevents-web 3.0-SNAPSHOT org.parancoe org.parancoe parancoe-web parancoe-core 3.0-SNAPSHOT 3.0-SNAPSHOT org.lambico lambico-spring-hibernate 1.0-SNAPSHOT Maven gestisce le dipendenze transitive (free developers) !!!Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 22
  23. 23. LINUXDAY 2012 www.linuxday.it Esempio di un grafo delle dipendenzeFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 23
  24. 24. LINUXDAY 2012 www.linuxday.it Risoluzione dei conflitti Due dipendenze dirette, a loro volta, hanno una dipendenza diretta su uno stesso (groupId, artifactId, ?) – Maven risolve automaticamente la dipendenza transitiva a favore della versione più recente (make developer aware by asking) Una dipendenza diretta, a sua volta, ha una dipendenza diretta su un indesiderato (groupId, artifactId, ?) – Maven consente dichiarazione manuale delle esclusioni Indesiderato? – Per ridurre il numero di librerie distribuite. Per es: dipendenza transitiva non dichiarata esplicitamente di scope runtime, e riferita a funzionalità opzionali che non intendo usare – Per indicare una specifica implementazione di una libreria fra varie disponibili – Per problemi di licenza relativamente alla distribuzione (binari, sorgenti, javadoc)Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 24
  25. 25. LINUXDAY 2012 www.linuxday.it Risoluzione dei conflitti <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.5.ga</version> <exclusions> <exclusion> <groupId>javax.transaction</groupId> Sun JTA API JAR, <artifactId>jta</artifactId> non è </exclusion> disponibile nel </exclusions> repository </dependency> centrale di <dependency> <groupId>org.apache.geronimo.specs</groupId> Maven poiché <artifactId>geronimo-jta_1.1_spec</artifactId> non può essere <version>1.1</version> liberamente </dependency> distribuita </dependencies>Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 25
  26. 26. LINUXDAY 2012 www.linuxday.it Dependency Management Centralizza ed agevola la gestione delle versioni degli artefatti <project>   ...   <dependencyManagement>     <dependencies>            <dependency>         <groupId>ch.qos.logback</groupId>         <artifactId>logback­classic</artifactId>         <version>1.0.6</version>       </dependency>     </dependencies>   </dependencyManagement>Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 26
  27. 27. LINUXDAY 2012 www.linuxday.it Dependency Management In un pom.xml figlio si omette la versione ereditata dal padre <project>   ...   <dependencies>          <dependency>       <groupId>ch.qos.logback</groupId>       <artifactId>logback­classic</artifactId>       <version>1.0.6</version>     </dependency>   </dependencies> Con dependencyManagement in un pom.xml antenato i figli ereditano se dichiarano (groupId, artifactId)Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 27
  28. 28. LINUXDAY 2012 www.linuxday.it Project Inheritance <project>   <parent> Super POM     <groupId>com.taringamberini</groupId> Implicita     <artifactId>linuxdaydemo</artifactId>     <version>1.0.0</version> com.taringamberini   </parent> linuxdaydemo 1.0.0   <artifactId>linuxdaybook</artifactId>   ... Esplicita Sono ereditati: dependencies, developers, com.taringamberini plugin lists, reports lists, plugin executions, linuxdaybook plugin configuration 1.0.0 mvn help:effective­pomFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 28
  29. 29. LINUXDAY 2012 www.linuxday.it Multi-module vs. Inheritance Super POM Ereditarietà com.taringamberini linuxdaydemo 1.0.0 com.taringamberini java-sources 1.0.0 com.taringamberini Sotto modulo linuxdaybook 1.0.0 com.taringamberini linuxday-chapters 1.0.0Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 29
  30. 30. LINUXDAY 2012 www.linuxday.it Build Lifecycle pre-clean Build Lifecycle: una sequenza di fasi clean identificate ognuna da un nome post-clean Maven Plugin: insieme di uno o più goal Goal: un compito specifico da eseguire – La più piccola “unita di lavoro” eseguibile da Maven – Identificato come pluginId:goalId Un goal può essere associato ad una fase – Quando lesecuzione del ciclo di vita raggiunge la fase package allora è eseguito il goal jar del plugin jarFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 30
  31. 31. LINUXDAY 2012 www.linuxday.it Build Lifecycle Esecuzione – surfire:test esegue solo il goal test del plugin surfire – test esegue tutti i goal associati a tutte le fasi fino alla fase test Principali build lifecycle – clean Rimuove la directory target – default (build) modello generale di un processo di build – site genera un sito contenente documentazione di progetto, e report: esito test, team, ...Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 31
  32. 32. LINUXDAY 2012 www.linuxday.it Build Lifecycle Quale goal, di quale plugin, deve essere associato ad una fase di un ciclo di vita è funzione del packaging <project>   ...   <groupId>it.jugpadova</groupId>   <artifactId>jugevents­web</artifactId>   <version>3.0­SNAPSHOT</version>   <packaging>war</packaging>   ... Sono già definiti i packaging: jar, war, ear, ejb, pom E possibile programmare nuovi: plugin, lifecycle, packagingFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 32
  33. 33. LINUXDAY 2012 www.linuxday.it Build Profile I profili consentono di specificare una build specifica per un determinato ambiente Build portabile fra vari i ambienti: SVIL, TEST, PROD <project>   ...   <profiles>     <profile>       <id>production</id>       <properties>...</properties>       <build>...</build>       <dependencies>...</dependencies>       <repositories>...</repositories>Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 33
  34. 34. LINUXDAY 2012 www.linuxday.it Oltre un build toolFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 34
  35. 35. LINUXDAY 2012 www.linuxday.it Site Generation Per la buona riuscita di un progetto gli aspetti comunicativi non sono da trascurare Serve un modo semplice per pubblicare online e mantenere documentazione Sul sito del progetto si cerca: – End-users: tutorials, guide utente, documentazioni delle API, mailing list – Developers: documentazione di progetto, report sul codice, issue tracking, roadmap e release plans – Wiki, report generati da sistemi di continuous integration, ... Generare un sito mvn siteFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 35
  36. 36. LINUXDAY 2012 www.linuxday.itFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 36
  37. 37. LINUXDAY 2012 www.linuxday.it Repository Manager E un proxy altamente configurabile fra la nostra azienda ed il repository pubblico di Maven E un repository Maven privato nella nostra azienda in cui deployare gli artifact: condivisione fra lintero team di sviluppo intranet Internet Developer 1 repository remote manager repository Developer 2 Developer 3 Developer 4Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 37
  38. 38. LINUXDAY 2012 www.linuxday.it Repository Manager Risparmio tempo e traffico Controllo periodico delle SNAPSHOT Controllo sulle dipendenze per – Inclusione/esclusione di particolari artifact – Inclusione/esclusione di particolari versioni – Inclusione/esclusione in funzione della licenza della dipendenza – Agevola ladesione a requisiti di qualità e sicurezza aziendali I principali repository manager Apache Archiva Artifactory Nexus http://docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Feature+MatrixFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 38
  39. 39. LINUXDAY 2012 www.linuxday.it Maven Docbkx Plugin DocBook – È un W3C XML Schema (RELAX NG, SGML, DTD) – È un linguaggio di markup semantico – È particolarmente indicato per articoli e libri Poiché DocBook è XML – È come codice sorgente – Storico salvato salvato sul RCS – Controllo delle revisioni :-) per definizione di RCS – Scrittura concorrente da parte di più autori img – È informaticamente elaborabile css Maven Docbkx Plugin docbook_document.html . docbook_document.xml DocBook XSL . docbook_document.pdfFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 39
  40. 40. LINUXDAY 2012 www.linuxday.it Maven Docbkx Plugin linuxday-book.xml linuxday-chapter-1.xml linuxday-chapter-2.xml linuxday-book.html . <xi:include docbkx-maven-plugin . linuxday-book.pdf src_fragment.xml db_table_fragment.xml my-plugin my-plugin src dbFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 40
  41. 41. LINUXDAY 2012 www.linuxday.it Bibliografia Maven By Example http://www.sonatype.com/Support/Books/Maven-By-Example Maven: The Complete Reference http://www.sonatype.com/Support/Books/Maven-The- Complete-Reference The Maven Cookbook http://www.sonatype.com/Support/Books/The-Maven-Cookbook Apache Maven http://maven.apache.org/index.htmlFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 41
  42. 42. LINUXDAY 2012 www.linuxday.it Contatti Tarin Gamberini www.jugpadova.itFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 42
  43. 43. LINUXDAY 2012 www.linuxday.it GRAZIE PER LATTENZIONEFerrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.itTarin Gamberini JUG Padova, Apache Maven 43

×