SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
Maven from
dummies
Una breve introduzione a Maven
Definizione di Maven
Project Management Tool che supporta lo sviluppatore durante la gestione dell'intero
ciclo di vita del progetto.

Per raggiungere l'obiettivo di fornire un supporto completo, Maven espone una serie di
features:

  ●   build system: ha un sistema di building ben definito (da fasi) e facile da utilizzare
  ●   astrazione del progetto: realizzata mediante la presenza di un file "POM" dove
      descriviamo il progetto senza indicare proceduralmente come.
  ●   definisce degli standard: si utilizza un approccio di tipo convention based
  ●   crea il sito del progetto: es. apache.org è fatto con Maven
  ●   definisce il ciclo di vita del progetto: mediante una gerarchia di "fasi", composte
      da "goal", obiettivo specifico di una fase
  ●   basato su plugin: ad ogni goal è associato un plugin. I plugin utente sono la SPI
      con la quale personalizziamo Maven.
Il repository delle
dipendenze
● Maven è stato un precursore del "cloud" con
  i suoi repository

● Il funzionamento è a cascata, ovvero
   ○ local repository
   ○ enterprise mirror
   ○ cloud repository


● Il default è
   ○ local repository: $HOME/.m2/repository
   ○ cloud repository: repo1.maven.org
Dipendenze e coordinate
Una dipendenza è identificata dalle coordinate all'interno dello spazio delle
dipendenze:

    {
        groupId: obbligatorio,
        artifactId: obbligatorio,
        version: obbligatorio,
        packaging: default jar, classifier: default ""
    }

Le dipendenze sono di due tipi:
 ● release: la copia sul repository locale è definitiva.
 ● snapshot: viene con una certa frequenza controllato il repository remoto
    se lo "snapshot" è stato aggiornato.
Dipendenze e scope
● test: utilizza per compilare src/test/java
● system: non è sul repository di Maven ma sul local file
    system
●   compile: comprende tutte le altre
●   provided: inclusa a compile time ma non nell'artifact da
    deployare. Non è transitiva
●   runtime: inclusa nell'artifact da deployare ma non a
    compile-time
●   import: non importa l'artifact ma le dipendenze dell'
    artifact.
Le fasi di un progetto
Il ciclo di vita di un progetto è composto da un insieme di fasi
ben distinte:
 ● validate
 ● compile
 ● test
 ● package
 ● integration-test
 ● verify
 ● install
 ● deploy
ognuna delle quali lancia un insieme di goal e dipende dalla
precedenti (ovvero lanciando package vengono eseguite
validate, compile, test, package)
Goals e Plugins
A ogni fase corrispondono uno o più goal (dipendente dal
packaging). Ad es. per un ear:

   package ==> ear:ear

ad ogni goal corrisponde uno ed un solo plugin

   ear:ear
     ==> org.apache.maven.plugins:maven-ear-
   plugin:2.4.1:ear
Moduli e sottomoduli
● Possiamo organizzare i progetti più
  complessi in sottomoduli, ovvero progetti
  che condividono lo stesso ciclo di build

● Possiamo anche definire moduli che
  ereditano da altri moduli

● Ovviamente è possibile una combinazione
  dei due
Profili e proprietà
● Profili: permettono la ridefinizione di
  qualsiasi elemento del pom a partire da
  alcune condizioni o semplicemente da un
  parametro di mvn

● Proprietà: permettono la parametrizzazione
  interna o esterna del nostro POM o,
  attraverso il filtering, delle nostre risorse
Resource filtering
Permette l'uso delle property di Maven sui nostri file di
risorse:
 <property name="eclipselink.logging.level"
            value="${eclipseLinkLogLevel}"/>

di default è disabilitato, per abilitarlo basta ridefinire il tag
sulla cartella per la quale ne abbiamo bisogno, tipicamente:
   <resources>
           <resource>
               <directory>src/main/resources</directory>
               <filtering>true</filtering>
           </resource>
       </resources>

Contenu connexe

Tendances

Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
MongoDB
 

Tendances (20)

App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
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
 
#2014LRIS - Liferay in a Cloud-Driven World
#2014LRIS - Liferay in a Cloud-Driven World#2014LRIS - Liferay in a Cloud-Driven World
#2014LRIS - Liferay in a Cloud-Driven World
 
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
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.com
 
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
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo Episodio
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Introduzione a docker
Introduzione a dockerIntroduzione a docker
Introduzione a docker
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensione
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
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
 
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)
 

Similaire à Maven from dummies

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
Giorgio Cefaro
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
Yeser Rema
 
LUG - Logical volumes management
LUG - Logical volumes managementLUG - Logical volumes management
LUG - Logical volumes management
Alessandro Manfredi
 

Similaire à Maven from dummies (20)

m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDE
 
Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
Maven: Convention over Configuration
Maven: Convention over ConfigurationMaven: Convention over Configuration
Maven: Convention over Configuration
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Building Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOneBuilding Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOne
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
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
 
SVN/TRAC
SVN/TRACSVN/TRAC
SVN/TRAC
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchetti
 
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
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACS
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
Build Automation Tips
Build Automation TipsBuild Automation Tips
Build Automation Tips
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
 
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
 
LUG - Logical volumes management
LUG - Logical volumes managementLUG - Logical volumes management
LUG - Logical volumes management
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea Vallotti
 

Plus de firenze-gtug

Plus de firenze-gtug (20)

Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT oriented
 
Android ndk - ottimizzazione su dispositivi Intel
Android ndk - ottimizzazione su dispositivi IntelAndroid ndk - ottimizzazione su dispositivi Intel
Android ndk - ottimizzazione su dispositivi Intel
 
Gwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca TosiGwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca Tosi
 
Youtube broadcast live - Massimiliano D'Ambrosio
Youtube broadcast live - Massimiliano D'AmbrosioYoutube broadcast live - Massimiliano D'Ambrosio
Youtube broadcast live - Massimiliano D'Ambrosio
 
Intro BeagleBone Black - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'AmbrosioIntro BeagleBone Black - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'Ambrosio
 
Arduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'AmbrosioArduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'Ambrosio
 
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo BugianiIntroduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
 
RFID: What & Why - Stefano Coluccini
RFID: What & Why - Stefano ColucciniRFID: What & Why - Stefano Coluccini
RFID: What & Why - Stefano Coluccini
 
GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)
 
Presentazione Google App Engine
Presentazione Google App EnginePresentazione Google App Engine
Presentazione Google App Engine
 
Android chat in the cloud
Android chat in the cloudAndroid chat in the cloud
Android chat in the cloud
 
Clean android code
Clean android codeClean android code
Clean android code
 
#Html2Native
#Html2Native#Html2Native
#Html2Native
 
Intel ndk - a few Benchmarks
Intel ndk - a few BenchmarksIntel ndk - a few Benchmarks
Intel ndk - a few Benchmarks
 
EE Incremental Store
EE Incremental StoreEE Incremental Store
EE Incremental Store
 
Programming objects with android
Programming objects with androidProgramming objects with android
Programming objects with android
 
Apertura "Mobile & Embedded" - 13 febbraio 2014
Apertura "Mobile & Embedded" - 13 febbraio 2014Apertura "Mobile & Embedded" - 13 febbraio 2014
Apertura "Mobile & Embedded" - 13 febbraio 2014
 
Apps fuel oct2012
Apps fuel oct2012Apps fuel oct2012
Apps fuel oct2012
 
Dev fest android application case study
Dev fest android application   case studyDev fest android application   case study
Dev fest android application case study
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdk
 

Maven from dummies

  • 1. Maven from dummies Una breve introduzione a Maven
  • 2. Definizione di Maven Project Management Tool che supporta lo sviluppatore durante la gestione dell'intero ciclo di vita del progetto. Per raggiungere l'obiettivo di fornire un supporto completo, Maven espone una serie di features: ● build system: ha un sistema di building ben definito (da fasi) e facile da utilizzare ● astrazione del progetto: realizzata mediante la presenza di un file "POM" dove descriviamo il progetto senza indicare proceduralmente come. ● definisce degli standard: si utilizza un approccio di tipo convention based ● crea il sito del progetto: es. apache.org è fatto con Maven ● definisce il ciclo di vita del progetto: mediante una gerarchia di "fasi", composte da "goal", obiettivo specifico di una fase ● basato su plugin: ad ogni goal è associato un plugin. I plugin utente sono la SPI con la quale personalizziamo Maven.
  • 3. Il repository delle dipendenze ● Maven è stato un precursore del "cloud" con i suoi repository ● Il funzionamento è a cascata, ovvero ○ local repository ○ enterprise mirror ○ cloud repository ● Il default è ○ local repository: $HOME/.m2/repository ○ cloud repository: repo1.maven.org
  • 4. Dipendenze e coordinate Una dipendenza è identificata dalle coordinate all'interno dello spazio delle dipendenze: { groupId: obbligatorio, artifactId: obbligatorio, version: obbligatorio, packaging: default jar, classifier: default "" } Le dipendenze sono di due tipi: ● release: la copia sul repository locale è definitiva. ● snapshot: viene con una certa frequenza controllato il repository remoto se lo "snapshot" è stato aggiornato.
  • 5. Dipendenze e scope ● test: utilizza per compilare src/test/java ● system: non è sul repository di Maven ma sul local file system ● compile: comprende tutte le altre ● provided: inclusa a compile time ma non nell'artifact da deployare. Non è transitiva ● runtime: inclusa nell'artifact da deployare ma non a compile-time ● import: non importa l'artifact ma le dipendenze dell' artifact.
  • 6. Le fasi di un progetto Il ciclo di vita di un progetto è composto da un insieme di fasi ben distinte: ● validate ● compile ● test ● package ● integration-test ● verify ● install ● deploy ognuna delle quali lancia un insieme di goal e dipende dalla precedenti (ovvero lanciando package vengono eseguite validate, compile, test, package)
  • 7. Goals e Plugins A ogni fase corrispondono uno o più goal (dipendente dal packaging). Ad es. per un ear: package ==> ear:ear ad ogni goal corrisponde uno ed un solo plugin ear:ear ==> org.apache.maven.plugins:maven-ear- plugin:2.4.1:ear
  • 8. Moduli e sottomoduli ● Possiamo organizzare i progetti più complessi in sottomoduli, ovvero progetti che condividono lo stesso ciclo di build ● Possiamo anche definire moduli che ereditano da altri moduli ● Ovviamente è possibile una combinazione dei due
  • 9. Profili e proprietà ● Profili: permettono la ridefinizione di qualsiasi elemento del pom a partire da alcune condizioni o semplicemente da un parametro di mvn ● Proprietà: permettono la parametrizzazione interna o esterna del nostro POM o, attraverso il filtering, delle nostre risorse
  • 10. Resource filtering Permette l'uso delle property di Maven sui nostri file di risorse: <property name="eclipselink.logging.level" value="${eclipseLinkLogLevel}"/> di default è disabilitato, per abilitarlo basta ridefinire il tag sulla cartella per la quale ne abbiamo bisogno, tipicamente: <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>