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>