SlideShare a Scribd company logo
1 of 43
LINUXDAY 2012
                                                                                www.linuxday.it




                                     Apache Maven
                                            Tarin Gamberini




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                     1
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 author's 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.it

Tarin Gamberini JUG Padova, Apache Maven                                                     2
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 plugin



Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                     3
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 dell'Informazione presso l'Ordine
      degli Ingegneri di Ferrara

      Si interessa di Object Oriented Design, Design
      Patterns,   Build   Automation,    Testing   e
      Continuous Integration

Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                     4
LINUXDAY 2012
                                                                                www.linuxday.it




                                           Introduzione




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                     5
LINUXDAY 2012
                                                                                www.linuxday.it



   Apache Maven... Cos'è?
      Dipende dai punti di vista


      Un build tool
        –   Preprocessing, compilation, packaging, testing,
            distribution
        –   C'era 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 plugin




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                     6
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 un'interfaccia comune di progettazione del build
        –   Checkout dal RCS
            mvn install



Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                     7
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                     8
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                     9
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 d'ambiente
          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   d'ambiente
      JAVA_HOME che punta alla JDK
      Verificare la corretta installazione
          mvn ­­version


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                                 10
LINUXDAY 2012
                                                                                www.linuxday.it




                            Principali caratteristiche




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    11
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 quest'ultima come contenente un
      progetto Maven


      Nel pom.xml è dichiarato l'identità 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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    12
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    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>


                Identità del progetto definita tramite coordinate
                  (groupId, artifactId, version) = (x, y, z)



Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    14
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.0


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                                15
LINUXDAY 2012
                                                                                www.linuxday.it



   Local Repository
      Maven crea nella directory
      utente la directory .m2

      .m2/settings.xml
      Un file contenente
      configurazioni specifiche
      dell'utente relative ad
      autenticazione, repositories,
      ed altre informazioni per
      customizzare il
      comportamento di Maven

      .m2/repository/
      La directory contenente il
      repository locale di Maven
Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    16
LINUXDAY 2012
                                                                                www.linuxday.it



   Local Repository
      Maven cerca le dipendenze (librerie) nel repository locale




                                                               PC
                             1
       pom.xml

                                 2
                                           3



                          local
                       repository


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    17
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
                       repository


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                             18
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 l'esecuzione 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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    19
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                             20
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                             21
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                            22
LINUXDAY 2012
                                                                                www.linuxday.it



   Esempio di un grafo delle dipendenze




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    23
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    24
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                          25
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    26
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    27
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­pom


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                             28
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.0


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                                29
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 l'esecuzione del ciclo di vita
            raggiunge la fase package allora è
            eseguito il goal jar del plugin jar

Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                               30
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    31
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, packaging


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    32
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.it

Tarin Gamberini JUG Padova, Apache Maven                                                    33
LINUXDAY 2012
                                                                                www.linuxday.it




                                    Oltre un build tool




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    34
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 site




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    35
LINUXDAY 2012
                                                                                www.linuxday.it




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    36
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 l'intero team di sviluppo
                                                                     intranet   Internet


         Developer 1

                                    repository                                               remote
                                     manager                                               repository

  Developer 2




                      Developer 3                        Developer 4
Ferrara, 2012-10-27    FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                                 37
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 l'adesione 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+Matrix


Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                      38
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.pdf

Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                              39
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                                           db

Ferrara, 2012-10-27    FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                             40
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.html

Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    41
LINUXDAY 2012
                                                                                www.linuxday.it



   Contatti




                                                   Tarin Gamberini



                                                   www.jugpadova.it




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    42
LINUXDAY 2012
                                                                                www.linuxday.it




                                 GRAZIE PER L'ATTENZIONE




Ferrara, 2012-10-27   FLUG – Ferrara Linux User Group - www.ferrara.linux.it

Tarin Gamberini JUG Padova, Apache Maven                                                    43

More Related Content

What's hot

Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGiuliano Latini
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzionegiacomos
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.comAntonio Musarra
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Antbobpuley
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerRoberto Messora
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017MongoDB
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchettigiallu
 
Appunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationAppunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationVincenzo Argese
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloudGabriele Baldoni
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Antonio Musarra
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)Giuliano Latini
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Marco Chiesi
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsGaetano Giunta
 
Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentalsmvetro
 

What's hot (20)

Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.com
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
 
Introduzione a docker
Introduzione a dockerIntroduzione a docker
Introduzione a docker
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Docker
Docker Docker
Docker
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchetti
 
Appunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationAppunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux Certification
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentals
 

Viewers also liked

Commit messages - Good practices
Commit messages - Good practicesCommit messages - Good practices
Commit messages - Good practicesTarin Gamberini
 
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system Tarin Gamberini
 
MUTANTS KILLER - PIT: state of the art of mutation testing system
MUTANTS KILLER - PIT: state of the art of mutation testing system MUTANTS KILLER - PIT: state of the art of mutation testing system
MUTANTS KILLER - PIT: state of the art of mutation testing system Tarin Gamberini
 
Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!benfante
 
Getting Started with Spring Framework
Getting Started with Spring FrameworkGetting Started with Spring Framework
Getting Started with Spring FrameworkEdureka!
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVCDzmitry Naskou
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - CoreDzmitry Naskou
 

Viewers also liked (10)

Commit messages - Good practices
Commit messages - Good practicesCommit messages - Good practices
Commit messages - Good practices
 
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
 
MUTANTS KILLER - PIT: state of the art of mutation testing system
MUTANTS KILLER - PIT: state of the art of mutation testing system MUTANTS KILLER - PIT: state of the art of mutation testing system
MUTANTS KILLER - PIT: state of the art of mutation testing system
 
Spring 2.5
Spring 2.5Spring 2.5
Spring 2.5
 
Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!Spring: usarlo conviene, ma usalo bene!
Spring: usarlo conviene, ma usalo bene!
 
AngularJS 2.0
AngularJS 2.0 AngularJS 2.0
AngularJS 2.0
 
Getting Started with Spring Framework
Getting Started with Spring FrameworkGetting Started with Spring Framework
Getting Started with Spring Framework
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 

Similar to Apache Maven

BioDec LinuxDay2012 Erlug
BioDec LinuxDay2012 ErlugBioDec LinuxDay2012 Erlug
BioDec LinuxDay2012 ErlugBioDec
 
Linuxday 2012 : Introduzione a Proxmox Ve
Linuxday 2012 : Introduzione a Proxmox VeLinuxday 2012 : Introduzione a Proxmox Ve
Linuxday 2012 : Introduzione a Proxmox VeIvan Zini
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfrescoMirco Leo
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Corso Avanzato Alfresco Ecm
Corso Avanzato Alfresco EcmCorso Avanzato Alfresco Ecm
Corso Avanzato Alfresco Ecmedoardo fraioli
 
Linguaggio Java
Linguaggio JavaLinguaggio Java
Linguaggio JavaGSamLo
 
Simple Network Management Protocol
Simple Network Management ProtocolSimple Network Management Protocol
Simple Network Management Protocolmichelemanzotti
 
Test Prestazionali di Web Service
Test Prestazionali di Web ServiceTest Prestazionali di Web Service
Test Prestazionali di Web ServiceDaniele Palladino
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al javaGiovanni Pace
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con AnsibleMatteo Magni
 
Open source nell'ente Regione Emilia-Romagna
Open source nell'ente Regione Emilia-RomagnaOpen source nell'ente Regione Emilia-Romagna
Open source nell'ente Regione Emilia-RomagnaTassoman ☺
 
Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.
Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.
Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.Raul Cafini
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e javaMatteo Baccan
 
Workshop paas - ECDay 23 Maggio 2012
Workshop paas - ECDay 23 Maggio 2012Workshop paas - ECDay 23 Maggio 2012
Workshop paas - ECDay 23 Maggio 2012VMEngine
 

Similar to Apache Maven (20)

Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
 
BioDec LinuxDay2012 Erlug
BioDec LinuxDay2012 ErlugBioDec LinuxDay2012 Erlug
BioDec LinuxDay2012 Erlug
 
Linuxday 2012 : Introduzione a Proxmox Ve
Linuxday 2012 : Introduzione a Proxmox VeLinuxday 2012 : Introduzione a Proxmox Ve
Linuxday 2012 : Introduzione a Proxmox Ve
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
Linuxday osgi speech
Linuxday osgi speechLinuxday osgi speech
Linuxday osgi speech
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Java AWT
Java AWTJava AWT
Java AWT
 
Corso Avanzato Alfresco Ecm
Corso Avanzato Alfresco EcmCorso Avanzato Alfresco Ecm
Corso Avanzato Alfresco Ecm
 
Linguaggio Java
Linguaggio JavaLinguaggio Java
Linguaggio Java
 
Simple Network Management Protocol
Simple Network Management ProtocolSimple Network Management Protocol
Simple Network Management Protocol
 
Test Prestazionali di Web Service
Test Prestazionali di Web ServiceTest Prestazionali di Web Service
Test Prestazionali di Web Service
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con Ansible
 
Open source nell'ente Regione Emilia-Romagna
Open source nell'ente Regione Emilia-RomagnaOpen source nell'ente Regione Emilia-Romagna
Open source nell'ente Regione Emilia-Romagna
 
Git best practices
Git best practicesGit best practices
Git best practices
 
Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.
Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.
Analisi ed implementazione di file system distribuiti in ambiente GNU/Linux.
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
 
Workshop paas - ECDay 23 Maggio 2012
Workshop paas - ECDay 23 Maggio 2012Workshop paas - ECDay 23 Maggio 2012
Workshop paas - ECDay 23 Maggio 2012
 

Apache Maven

  • 1. LINUXDAY 2012 www.linuxday.it Apache Maven Tarin Gamberini Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 1
  • 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 author's 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.it Tarin Gamberini JUG Padova, Apache Maven 2
  • 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 plugin Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 3
  • 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 dell'Informazione presso l'Ordine degli Ingegneri di Ferrara Si interessa di Object Oriented Design, Design Patterns, Build Automation, Testing e Continuous Integration Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 4
  • 5. LINUXDAY 2012 www.linuxday.it Introduzione Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 5
  • 6. LINUXDAY 2012 www.linuxday.it Apache Maven... Cos'è? Dipende dai punti di vista Un build tool – Preprocessing, compilation, packaging, testing, distribution – C'era 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 plugin Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 6
  • 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 un'interfaccia comune di progettazione del build – Checkout dal RCS mvn install Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 7
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 8
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 9
  • 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 d'ambiente 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 d'ambiente JAVA_HOME che punta alla JDK Verificare la corretta installazione mvn ­­version Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 10
  • 11. LINUXDAY 2012 www.linuxday.it Principali caratteristiche Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 11
  • 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 quest'ultima come contenente un progetto Maven Nel pom.xml è dichiarato l'identità 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.it Tarin Gamberini JUG Padova, Apache Maven 12
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 13
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 14
  • 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.0 Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 15
  • 16. LINUXDAY 2012 www.linuxday.it Local Repository Maven crea nella directory utente la directory .m2 .m2/settings.xml Un file contenente configurazioni specifiche dell'utente relative ad autenticazione, repositories, ed altre informazioni per customizzare il comportamento di Maven .m2/repository/ La directory contenente il repository locale di Maven Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 16
  • 17. LINUXDAY 2012 www.linuxday.it Local Repository Maven cerca le dipendenze (librerie) nel repository locale PC 1 pom.xml 2 3 local repository Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 17
  • 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 repository Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 18
  • 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 l'esecuzione 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.it Tarin Gamberini JUG Padova, Apache Maven 19
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 20
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 21
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 22
  • 23. LINUXDAY 2012 www.linuxday.it Esempio di un grafo delle dipendenze Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 23
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 24
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 25
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 26
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 27
  • 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­pom Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 28
  • 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.0 Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 29
  • 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 l'esecuzione del ciclo di vita raggiunge la fase package allora è eseguito il goal jar del plugin jar Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 30
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 31
  • 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, packaging Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 32
  • 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.it Tarin Gamberini JUG Padova, Apache Maven 33
  • 34. LINUXDAY 2012 www.linuxday.it Oltre un build tool Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 34
  • 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 site Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 35
  • 36. LINUXDAY 2012 www.linuxday.it Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 36
  • 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 l'intero team di sviluppo intranet Internet Developer 1 repository remote manager repository Developer 2 Developer 3 Developer 4 Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 37
  • 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 l'adesione 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+Matrix Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 38
  • 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.pdf Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 39
  • 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 db Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 40
  • 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.html Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 41
  • 42. LINUXDAY 2012 www.linuxday.it Contatti Tarin Gamberini www.jugpadova.it Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 42
  • 43. LINUXDAY 2012 www.linuxday.it GRAZIE PER L'ATTENZIONE Ferrara, 2012-10-27 FLUG – Ferrara Linux User Group - www.ferrara.linux.it Tarin Gamberini JUG Padova, Apache Maven 43