SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Maven
        Project Management Framework




Fulvio Di Marco
fulvio.dimarco@epocaricerca.it
Maven
Sommario


    Introduzione


    Obiettivi e caratteristiche principali


    POM: Project Object Model


    Un esempio reale con Fatturazione Elettronica


    Riferimenti
Maven

        Odi et amo...
        [ Catullo, Carme 85 ]
Maven
In poche parole, cos'è Maven?


    In Yiddish ed Ebraico: meyvn/mevin, accumulatore di conoscenza


    Strumento completo per la gestione di progetti software Java

     
         Compilazione del codice, distribuzione, documentazione e collaborazione


 Tentativo di applicare pattern consolidati e collaudati all'infrastruttura di build dei
progetti


    Apache Software Foundation, Open source


    “Scusa, io sono un manager, non ci sto capendo niente”:
    "Maven è uno strumento dichiarativo per la gestione dei progetti Java
    che permette di ridurre il tempo totale di sviluppo dei progetti (time-to-
    market) attraverso un efficace utilizzo delle sinergie disponibili.
    Maven permette di ridurre il numero delle risorse umane e
    contemporaneamente permette di ottenere elevate efficienze
    operative"
Maven

    Coerenza
    
        Standardizzazione di un insieme di best practice
    
        Adesione ad uno standard → Minore opacità

    Riusabilità

    Agilità
    
        Abbattimento dei costi di riuso
    
        Semplificazione del processo di creazione e integrazione di un singolo
        componente in un multi-project build
    
        Abbattimento dei costi di project-switch per gli sviluppatori

    Manutenibilità
    
        Abbattimento dei costi di implementazione/manutenzione del processo di
        build
    
        Incremento della manutenibiltà come conseguenza dell'adozione di un
        modello comune di build
Maven: i principi
Cristopher Alexander (1977):
  “patterns help create a shared language for communicating
    insight and experience about problems and their solutions”


    Convenzioni sulla configurazione

    Dichiaratività

    Riutilizzo della logica di build

    Gestione e organizzazione delle dipendenze
Convenzioni sulla configurazione

  Organizzazione standard della directory dei progetti
(collocazione del codice sorgente, dei file di
configurazione, della documentazione, degli artefatti
generati)
  
    Archetype

  Progetto Maven (1) → (1) Archivio distribuibile
  
    Separation Of Concerns (SoC)!

  Convenzioni sui nomi
     
         Es: spring-aspects-3.0.2.RELEASE.jar
Maven Archetype
Project templating toolkit

    Archetipo:“modello a a partire dal quale tuttialtrialtri oggetti
    Archetipo: “modello partire dal quale tutti gli gli oggetti dello
    stesso stesso tipo sono creati”.
    dello tipo sono creati”.

   Definizione della struttura di progetto.
    Definizione della struttura di progetto.

   Best practices
    Best practices
             Consistenza, portabilità, riutilizzo, apprendimento,
             Consistenza, portabilità, riutilizzo,
           
           
             trasferibilità.
              apprendimento, trasferibilità.

    Archetipi pre-esistenti o custom per la propria organizzazione

    Archetipi pre-esistenti o custom per la propria
mvn organizzazione
mvn archetype:generate -DgroupId=it.epoca -DartifactId=seminar-
     archetype:generate -DgroupId=it.epoca -DartifactId=seminar-
j2ee-project -DarchetypeGroupId=org.jboss.weld.archetypes
j2ee-project -DarchetypeGroupId=org.jboss.weld.archetypes
-DarchetypeArtifactId=weld-jsf-jee -DarchetypeVersion=1.0.0-BETA1
-DarchetypeArtifactId=weld-jsf-jee -DarchetypeVersion=1.0.0-BETA1
-DinteractiveMode=false
-DinteractiveMode=false
Maven Archetype

          src/main/java        Application/Library sources
          src/main/resources   Application/Library
          src/main/filters     resources filter files
                               Resource
          src/main/assembly    Assembly descriptors
          src/main/config      Configuration files
          src/main/webapp      Web application sources
          src/test/java        Test sources
          src/test/resources   Test resources
          src/test/filters     Test resource filter files
          src/site             Site
          LICENSE.txt          Project's license
          README.txt           Project's readme
Dichiaratività

 
     Per design, Maven è un framework “progetto-
     centrico” e il POM (Project Object Model) è la
     descrizione di un singolo progetto.

 
     Qualsiasi aspetto viene specificato e configurato
     all'interno del file pom.xml ubicato nella radice di
     progetto.

 
     E' mediante il POM che Maven gestisce ogni singolo
     aspetto e stadio del ciclo di vita del progetto.
POM: Project Object Model
“Building the build”

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>it.epocaricerca</groupId>
  <artifactId>maven-seminar</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
     <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
     </dependency>
  </dependencies>
</project>
POM: Project Object Model
“Building the build”


    Informazioni relative al progetto   
                                            Reportistica e copertura dei test

    Parentela                           
                                            Javadoc

    Profili                             
                                            Issue tracking

    Dipendenze                          
                                            Continuous Integration

    Plugins                             
                                            Mailing list

    Infrastruttura di build             
                                            Project Team

    Generazione del sito                
                                            Code Analysis

    Source Control Management
Riutilizzo della logica di build

    Riutilizzo → Incoraggiamento alla SoC

    Incapsulamento della logica di build in appositi plugin (cross-project)

    Coordinamento dell'esecuzione di tali plugin
Gestione e organizzazione delle
dipendenze

  Artifact (Artefatto): “A specific piece of software”
        
           jar, war, sar, ear

  Dipendenza: riferimento ad un artefatto specifico
dislocato in un preciso repository remoto.

  Maven interpreta le coordinate delle dipendenze
esplicitate nel POM e cerca di soddisfare tali riferimenti
cercando gli artefatti richiesti nei repository remoti
disponibili nel contesto di progetto.

  Se la dipendenza richiesta viene localizzata, Maven
provvede al download e all'installazione presso il
repository locale.
                  Dipendenze logiche
Gestione delle dipendenze

    Due tipi di repository: locale e remoti.

 Durante il normale funzionamento, Maven, interagisce con il
repository locale; qualora però una dipendenza non sia presente
all'interno di tale repository, Maven si occupa di consultare i repository
remoti ai quali ha accesso, al fine di risolvere la dipendenza
mancante.
Gestione delle dipendenze
Apache Archiva

    Apache Archiva
         
           gestione di repository Maven utilizzato non solo per la
           distribuzione intra-aziendale degli artefatti Maven
         
           proxy verso repository remoti → riduzione overhead e
           impegno di banda
Gestione delle dipendenze
Coordinate

    Ciascuna dipendenza è univocamente identificata dai seguenti identificatori:

 groupId: identifica univocamente un insieme di progetti appartenenti alla
stessa organizzazione, team, ...
    
        es. javax, org.springframework, it.fe, ...

 artifactId: indica il nome del progetto. In combinazione con il groupId
genera il nome univoco del progetto.
    
        javax.persistence-api
    
        org.springframework.core
    
        it.fe.process-invoice

 version: indica una specifica versione del progetto. Un repository Maven
può contenere molteplici versioni di uno stesso progetto.
Gestione delle dipendenze: scope
Ciascuna dipendenza ha uno scope.
Lo scope influisce su:

    Transitività delle dipendenze

    Classpath dei build task
Sei scope disponibili:

    compile. Default scope. Disponibilità in tutti i classpath di un progetto.
    Propagazione ai progetti dipendenti.

     provided. La dipendenza è fornita da un'altra entità, come il JDK o un
    container (ad esempio un AS). È disponibile solo per il classpath di
    compilazione e non è transitivo.

     runtime. La dipendenza non è richiesta a tempo di compilazione, ma solo
    in esecuzione.

    test. La dipendenza è richiesta solo durante la fase di test del progetto.

    ...
Lifecycle

     Build lifecycle: il processo di build e distribuzione di un
     determinato artefatto (progetto) è puntualmente specificato.

     Tre lifecycle built-in: default, clean, site.

     Ciascun build lifecycle è costituito da un differente insieme di
     fasi, ove ciascuna fase rappresenta un passo nel lifecycle.
Ad esempio il default lifecycle:

     validate – verifica che il progetto sia corretto e che tutte le informazioni necessarie siano disponibili

     compile – compila il codice sorgente del progetto

     test – test del codice sorgente compilato utilizzando uno unit testing framework appropriato.

     package – assembla il codice compilato nel formato distribuile specificato, ad es. jar.

     integration-test – assembla ed esegue il deploy del package in un ambiente dove eseguire i test di integrazione.

     verify – esegue controlli per verificare la correttezza e la qualità del package generato.

     install – installa il package nel repository locale in maniera tale che possa essere utilizzato come dipendenza da altri
     progetti locali.

     deploy – eseguito in un ambiente di integrazione o di produzione, copia il package presso il repository remoto al fine di
     consentire la condivisione con altri sviluppatori o progetti
Maven vs. Ant
Maven in FE
Riferimenti
 supporto@epocaricerca.it
 Apache Maven Project: http://maven.apache.org,


Documentazione online:
    – http://maven.apache.org/apache-maven.pdf

  Archiva: The Build Artifact Repository Manager:
http://archiva.apache.org

  Vincent Massol, Jason Van Zyl, “Better Build With Maven”,
Mergere Library Press

Weitere ähnliche Inhalte

Was ist angesagt?

Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Java Network Programming
Java Network ProgrammingJava Network Programming
Java Network ProgrammingStefano Sanna
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioAntonio Musarra
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSNucleode Srl
 

Was ist angesagt? (9)

Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Java Network Programming
Java Network ProgrammingJava Network Programming
Java Network Programming
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo Episodio
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACS
 

Andere mochten auch

Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummiesfirenze-gtug
 
MySQL
MySQLMySQL
MySQLjekil
 
Tecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi DistribuitiTecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi DistribuitiK-Tech Formazione
 
Corso Unified Modeling Language (UML)
Corso Unified Modeling Language (UML)Corso Unified Modeling Language (UML)
Corso Unified Modeling Language (UML)K-Tech Formazione
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 

Andere mochten auch (7)

Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
 
MySQL
MySQLMySQL
MySQL
 
Mysql diventa grande
Mysql diventa grandeMysql diventa grande
Mysql diventa grande
 
Tecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi DistribuitiTecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi Distribuiti
 
Corso Unified Modeling Language (UML)
Corso Unified Modeling Language (UML)Corso Unified Modeling Language (UML)
Corso Unified Modeling Language (UML)
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 

Ähnlich wie Maven - Aprile 2010

Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con AnsibleMatteo Magni
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del SoftwareYeser Rema
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfrescoMirco Leo
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetesblexin
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Gian Maria Ricci
 
Tech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloTech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloCodemotion
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERDotNetCampus
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventorfdizazzo
 
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
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 

Ähnlich wie Maven - Aprile 2010 (20)

Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con Ansible
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
Eclipse Svn
Eclipse SvnEclipse Svn
Eclipse Svn
 
Tech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non soloTech Webinar: Test e2e per AngularJS e non solo
Tech Webinar: Test e2e per AngularJS e non solo
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
 
Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventor
 
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
 
Build Automation Tips
Build Automation TipsBuild Automation Tips
Build Automation Tips
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Introduzione a Ember.js
Introduzione a Ember.jsIntroduzione a Ember.js
Introduzione a Ember.js
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 

Kürzlich hochgeladen

Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Kürzlich hochgeladen (9)

Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

Maven - Aprile 2010

  • 1. Maven Project Management Framework Fulvio Di Marco fulvio.dimarco@epocaricerca.it
  • 2. Maven Sommario  Introduzione  Obiettivi e caratteristiche principali  POM: Project Object Model  Un esempio reale con Fatturazione Elettronica  Riferimenti
  • 3. Maven Odi et amo... [ Catullo, Carme 85 ]
  • 4. Maven In poche parole, cos'è Maven?  In Yiddish ed Ebraico: meyvn/mevin, accumulatore di conoscenza  Strumento completo per la gestione di progetti software Java  Compilazione del codice, distribuzione, documentazione e collaborazione  Tentativo di applicare pattern consolidati e collaudati all'infrastruttura di build dei progetti  Apache Software Foundation, Open source  “Scusa, io sono un manager, non ci sto capendo niente”: "Maven è uno strumento dichiarativo per la gestione dei progetti Java che permette di ridurre il tempo totale di sviluppo dei progetti (time-to- market) attraverso un efficace utilizzo delle sinergie disponibili. Maven permette di ridurre il numero delle risorse umane e contemporaneamente permette di ottenere elevate efficienze operative"
  • 5. Maven  Coerenza  Standardizzazione di un insieme di best practice  Adesione ad uno standard → Minore opacità  Riusabilità  Agilità  Abbattimento dei costi di riuso  Semplificazione del processo di creazione e integrazione di un singolo componente in un multi-project build  Abbattimento dei costi di project-switch per gli sviluppatori  Manutenibilità  Abbattimento dei costi di implementazione/manutenzione del processo di build  Incremento della manutenibiltà come conseguenza dell'adozione di un modello comune di build
  • 6. Maven: i principi Cristopher Alexander (1977): “patterns help create a shared language for communicating insight and experience about problems and their solutions”  Convenzioni sulla configurazione  Dichiaratività  Riutilizzo della logica di build  Gestione e organizzazione delle dipendenze
  • 7. Convenzioni sulla configurazione  Organizzazione standard della directory dei progetti (collocazione del codice sorgente, dei file di configurazione, della documentazione, degli artefatti generati)  Archetype  Progetto Maven (1) → (1) Archivio distribuibile  Separation Of Concerns (SoC)!  Convenzioni sui nomi  Es: spring-aspects-3.0.2.RELEASE.jar
  • 8. Maven Archetype Project templating toolkit  Archetipo:“modello a a partire dal quale tuttialtrialtri oggetti Archetipo: “modello partire dal quale tutti gli gli oggetti dello stesso stesso tipo sono creati”. dello tipo sono creati”.   Definizione della struttura di progetto. Definizione della struttura di progetto.   Best practices Best practices Consistenza, portabilità, riutilizzo, apprendimento, Consistenza, portabilità, riutilizzo,   trasferibilità. apprendimento, trasferibilità.  Archetipi pre-esistenti o custom per la propria organizzazione  Archetipi pre-esistenti o custom per la propria mvn organizzazione mvn archetype:generate -DgroupId=it.epoca -DartifactId=seminar- archetype:generate -DgroupId=it.epoca -DartifactId=seminar- j2ee-project -DarchetypeGroupId=org.jboss.weld.archetypes j2ee-project -DarchetypeGroupId=org.jboss.weld.archetypes -DarchetypeArtifactId=weld-jsf-jee -DarchetypeVersion=1.0.0-BETA1 -DarchetypeArtifactId=weld-jsf-jee -DarchetypeVersion=1.0.0-BETA1 -DinteractiveMode=false -DinteractiveMode=false
  • 9. Maven Archetype src/main/java Application/Library sources src/main/resources Application/Library src/main/filters resources filter files Resource src/main/assembly Assembly descriptors src/main/config Configuration files src/main/webapp Web application sources src/test/java Test sources src/test/resources Test resources src/test/filters Test resource filter files src/site Site LICENSE.txt Project's license README.txt Project's readme
  • 10. Dichiaratività  Per design, Maven è un framework “progetto- centrico” e il POM (Project Object Model) è la descrizione di un singolo progetto.  Qualsiasi aspetto viene specificato e configurato all'interno del file pom.xml ubicato nella radice di progetto.  E' mediante il POM che Maven gestisce ogni singolo aspetto e stadio del ciclo di vita del progetto.
  • 11. POM: Project Object Model “Building the build” <project> <modelVersion>4.0.0</modelVersion> <groupId>it.epocaricerca</groupId> <artifactId>maven-seminar</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
  • 12. POM: Project Object Model “Building the build”  Informazioni relative al progetto  Reportistica e copertura dei test  Parentela  Javadoc  Profili  Issue tracking  Dipendenze  Continuous Integration  Plugins  Mailing list  Infrastruttura di build  Project Team  Generazione del sito  Code Analysis  Source Control Management
  • 13. Riutilizzo della logica di build  Riutilizzo → Incoraggiamento alla SoC  Incapsulamento della logica di build in appositi plugin (cross-project)  Coordinamento dell'esecuzione di tali plugin
  • 14. Gestione e organizzazione delle dipendenze  Artifact (Artefatto): “A specific piece of software”  jar, war, sar, ear  Dipendenza: riferimento ad un artefatto specifico dislocato in un preciso repository remoto.  Maven interpreta le coordinate delle dipendenze esplicitate nel POM e cerca di soddisfare tali riferimenti cercando gli artefatti richiesti nei repository remoti disponibili nel contesto di progetto.  Se la dipendenza richiesta viene localizzata, Maven provvede al download e all'installazione presso il repository locale. Dipendenze logiche
  • 15. Gestione delle dipendenze  Due tipi di repository: locale e remoti.  Durante il normale funzionamento, Maven, interagisce con il repository locale; qualora però una dipendenza non sia presente all'interno di tale repository, Maven si occupa di consultare i repository remoti ai quali ha accesso, al fine di risolvere la dipendenza mancante.
  • 16. Gestione delle dipendenze Apache Archiva  Apache Archiva  gestione di repository Maven utilizzato non solo per la distribuzione intra-aziendale degli artefatti Maven  proxy verso repository remoti → riduzione overhead e impegno di banda
  • 17. Gestione delle dipendenze Coordinate  Ciascuna dipendenza è univocamente identificata dai seguenti identificatori:  groupId: identifica univocamente un insieme di progetti appartenenti alla stessa organizzazione, team, ...  es. javax, org.springframework, it.fe, ...  artifactId: indica il nome del progetto. In combinazione con il groupId genera il nome univoco del progetto.  javax.persistence-api  org.springframework.core  it.fe.process-invoice  version: indica una specifica versione del progetto. Un repository Maven può contenere molteplici versioni di uno stesso progetto.
  • 18. Gestione delle dipendenze: scope Ciascuna dipendenza ha uno scope. Lo scope influisce su:  Transitività delle dipendenze  Classpath dei build task Sei scope disponibili:  compile. Default scope. Disponibilità in tutti i classpath di un progetto. Propagazione ai progetti dipendenti.  provided. La dipendenza è fornita da un'altra entità, come il JDK o un container (ad esempio un AS). È disponibile solo per il classpath di compilazione e non è transitivo.  runtime. La dipendenza non è richiesta a tempo di compilazione, ma solo in esecuzione.  test. La dipendenza è richiesta solo durante la fase di test del progetto.  ...
  • 19. Lifecycle  Build lifecycle: il processo di build e distribuzione di un determinato artefatto (progetto) è puntualmente specificato.  Tre lifecycle built-in: default, clean, site.  Ciascun build lifecycle è costituito da un differente insieme di fasi, ove ciascuna fase rappresenta un passo nel lifecycle. Ad esempio il default lifecycle:  validate – verifica che il progetto sia corretto e che tutte le informazioni necessarie siano disponibili  compile – compila il codice sorgente del progetto  test – test del codice sorgente compilato utilizzando uno unit testing framework appropriato.  package – assembla il codice compilato nel formato distribuile specificato, ad es. jar.  integration-test – assembla ed esegue il deploy del package in un ambiente dove eseguire i test di integrazione.  verify – esegue controlli per verificare la correttezza e la qualità del package generato.  install – installa il package nel repository locale in maniera tale che possa essere utilizzato come dipendenza da altri progetti locali.  deploy – eseguito in un ambiente di integrazione o di produzione, copia il package presso il repository remoto al fine di consentire la condivisione con altri sviluppatori o progetti
  • 22. Riferimenti  supporto@epocaricerca.it  Apache Maven Project: http://maven.apache.org, Documentazione online: – http://maven.apache.org/apache-maven.pdf  Archiva: The Build Artifact Repository Manager: http://archiva.apache.org  Vincent Massol, Jason Van Zyl, “Better Build With Maven”, Mergere Library Press