Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
MAVEN
Per gestire correttamente le dipendenze di un progetto ed eseguire le operazioni di com-
pilazione (build) e test, è necessario utilizzare uno strumento da in
linea di comando
grado di scaricare tutte le dipendenze del progetto, compilare l’intera applicazione,
eseguire tutti i test e generare i report.
N.B: è importante separare le dipendenze del codice principale da quelle del codice di
test, per garantire un ambiente di testing coerente.
N.B: l’automatizzazione di queste operazioni semplifica notevolmente l’integrazione
con server di Continous Integration, che risulta particolarmente utile per gestire pro-
getti con numerosi test che richiedono tempi considerevoli per essere eseguiti. Inoltre
consente di gestire un ambiente comune tra più sviluppatori.
Quando il numero di dipendenze cresce, la gestione manuale del download dei file JAR
può diventare complessa e soggetta ad errori, specialmente considerando che alcune
dipendenze
librerie esterne potrebbero richiedere dipendenze aggiuntive (note come
transitive).
L’inclusione dei file JAR nel progetto e l’aggiunta al classpath introduce ulteriori com-
plessità nella distribuzione del progetto. Infatti, dopo aver rilasciato il progetto, do-
vremmo fornire agli utenti le informazioni necessarie per scaricare tutte le dipendenze.
Nel caso di una libreria o di un framework, gli sviluppatori interessati devono procedere
al download di tutte le dipendenze.
Invece, nel caso di un prodotto destinato agli utenti finali, è possibile incorporare tutte
le dipendenze nel file JAR finale. Tuttavia, dobbiamo includere soltanto le dipendenze
necessarie all’esecuzione dell’applicazione e non quelle specifiche per i test.
In ogni caso, la gestione manuale delle dipendenze rappresenta uno sforzo soggetto ad
errori.
Maven build)
è uno strumento di compilazione automatica (automatic e di gestione
management)
delle dipendenze (dependency per Java. Maven Cen-
In particolare, Maven fornisce un repository centrale remoto, noto come
tral, in cui sono disponibili tutte le librerie Java esistenti.
Maven segue un ciclo di vita ed altri meccanismi ben definiti basati su convenzioni.
Nonostante sia uno strumento molto rigido, consente alcune personalizzazioni.
Maven rappresenta un tentativo di applicare modelli alla complessità dell’infrastruttura
di sviluppo di un progetto per promuovere la comprensione e la produttività.
Fondamentalmente, Maven funge da strumento di gestione e comprensione dei progetti,
offrendo un approccio strutturato per gestire build, documentazioni, report, dipenden-
ze, Version Control Systms, release e distribution.
24
CAPITOLO 6. MAVEN 25
Attraverso questa organizzazione, Maven mira a semplificare il processo di sviluppo e
migliorare la collaborazione tra membri del team.
N.B: non combattere contro Maven, perderai.
Gli obiettivi di Maven includono:
artefatti
• Creare (come JAR, WAR, EAR, ecc...).
• Eseguire operazioni collaterali (come la creazione di una release completa e la sua
distribuzione su un repository remoto).
• Mantenere il processo di compilazione leggibile, riproducibile e consistente.
convenzioni configura-
Maven promuove un approccio basato sulle anziché sulla
zione. Ovvero, invece di scrivere comandi specifici per la compilazione ed il testing, è
sufficiente descrivere la struttura del progetto seguendo le convenzioni predefinite. Ad
esempio:
• I file sorgente devono essere collocati nella directory src/main/java.
• I test devono essere collocati nella directory src/test/java.
Maven conosce già i comandi da eseguire e li applica automaticamente in base alla
struttura del progetto. Inoltre, è possibile estendere le funzionalità di Maven attraverso
plug-in.
l’uso di
Maven semplifica il processo di gestione delle dipendenze e dei plug-in scaricandoli au-
tomaticamente dai repository Maven. Questi repository sono essenzialmente collezioni
remote accessibili tramite il web. Per impostazione predefinita, Maven utilizza il reposi-
Maven Central.
tory principale Questo repository contiene tutte le librerie Java ed i
plug-in Maven disponibili.
N.B: è possibile configurare Maven per utilizzare altri repository.
N.B: qualsiasi sviluppatore ha la possibilità di pubblicare i propri artefatti su Maven
Central, anche se questo processo è regolamentato da una serie di procedure burocrati-
che (disponibili nella Central Repository Documentation).
6.1 Installazione
Per installare Maven, seguire questi passaggi:
1. Scaricare i file binari dal sito ufficiale di Maven.
2. Dopo aver scaricato i file, aggiungerli al del Sistema Operativo.
PATH JDK Develop-
3. Assicurarsi di avere installato il compilatore Java, cioè (Java
ment Kit).
Possiamo anche utilizzare Maven da Eclipse, seguendo questi passaggi:
m2e - Maven Inte-
1. Assicurarsi di avere installato il plug-in di Eclipse chiamato
gration for Eclipse.
N.B: tipicamente è incluso nelle distribuzioni principali di Eclipse. Altrimenti,
può essere installato dal sito principale di Eclipse.
CAPITOLO 6. MAVEN 26
2. Una volta installato il plug-in m2e, non è necessario installare Maven separata-
mente nel Sistema Operativo. Il plug-in m2e contiene già una versione di Maven
integrata.
3. Possiamo eseguire Maven direttamente da Eclipse utilizzando il plug-in m2e.
N.B: non è richiesta l’esecuzione da riga di comando, a meno che non si voglia
eseguire Maven al di fuori dell’ambiente Eclipse (in questo caso, Maven deve
essere installato seguendo la precedente procedura). archetipi,
Per creare un nuovo progetto Maven, è possibile utilizzare gli che sono dei
template di progetti iniziali. Ad esempio, è possibile creare un progetto Maven per una
semplice applicazione Java o un’applicazione web Java.
Se Maven è installato nel Sistema Operativo, possiamo inzializzare un nuovo progetto
Maven direttamente da riga di comando:
1 mvn archetype:generate \
2 -DarchetypeGroupId=org.apache.maven.archetypes \
3 -DarchetypeArtifactId=maven-archetype-quickstart \
4 -DarchetypeVersion=1.4 \
5 -DgroupId=com.mycompany.app \
6 -DartifactId=my-app \
7 -DinteractiveMode=false
8
Questo comando utilizza l’archetipo per creare un pro-
maven-archetype-quickstart
getto Maven. Vediamo i parametri specificati cosa rappresentano:
• e specifica-
-DarchetypeGroupId -DarchetypeArtifactId -DarchetypeVersion
no l’archetipo da utilizzare.
• specifica il del progetto.
-DgroupId groupId
• specifica l’artifactId del progetto.
-DartifactId
• evita l’interazione interattiva durante la creazione del
-DinteractiveMode=false
progetto.
In alternativa, possiamo creare un nuovo progetto Maven direttamente da Eclipse (non
richiede l’installazione di Maven nel Sistema Operativo) seguento questi passaggi:
1. Aprire Eclipse ed assicurarsi che il plug-in m2e sia installato.
2. Selezionare “File” “New” “Other” nel menu di Eclipse.
→ →
3. Nella finestra di dialogo “Select a wizard”, espandere la categoria “Maven” e
selezionare “Maven Project”. Fare clic su “Next”.
CAPITOLO 6. MAVEN 27
Figura 6.1: Finestra di dialogo “Select a wizard”.
4. Assicurarsi che l’opzione “Create a simple project (skip archetype selection)” sia
selezionata. Fare clic su “Next”.
5. Nella schermata successiva, inserire le informazioni del gruppo e dell’artifact, co-
me ad esempio e Queste informazioni identificano univoca-
groupId artifactId.
mente il progetto. Fare clic su “Finish”.
Figura 6.2: Schermata per specificare i parametri dell’archetipo.
6. Maven utilizzerà un archetipo predefinito per creare la struttura di base del pro-
getto.
N.B: se si desidera utilizzare un archetipo specifico, è possibile selezionare “Crea-
te from archetype” nella schermata delle informazioni del progetto e scegliere
l’archetipo desiderato. In alternativa, tornare al passo 4 e deselezionare l’opzione
“Create a simple project (skip archetype selection)”. Quindi scegliere l’archetipo
desiderato.
CAPITOLO 6. MAVEN 28
Figura 6.3: Schermata di selezione dell’archetipo desiderato.
Una volta inizializzato il progetto, verranno create le cartelle ed i file necessari per il
progetto Maven all’interno della directory specificata dall’artifactId. La struttura
delle cartelle può variare in base all’archetipo utilizzato.
Figura 6.4: Struttura del progetto Maven utilizzando l’archetipo maven-archetype-quickstart.
Un progetto Maven creato al di fuori di Eclipse non contiene i metadati del progetto
Eclipse (cioè i file e Tuttavia, possiamo importare un progetto
.project .classpath).
Maven esistente in Eclipse seguendo i seguenti passaggi:
1. Aprire Eclipse e selezionare “File” Import.
→
2. Nella finestra di dialogo di importazione, espandere la categoria “Maven” e sele-
zionare “Existing Maven Projects”. Fare clic su “Next”.
3. Selezionare la Root Directory del progetto Maven esistente e fare clic su “Next”.
4. Fare clic su “Finish” per completare il processo di importazione. Eclipse importe-
rà automaticamente il progetto Maven esistente, creando i metadati del progetto
(come e e convertendolo in un progetto Eclipse.
.project .classpath)
CAPITOLO 6. MAVEN 29
La struttura del progetto Maven segue precise convenzioni per il codice principale e
per i test, con lo scopo di organizzare in modo ordinato il codice di produzione ed i
relativi test. In particolare, dobbiamo creare due cartelle separate (cioè, una per il
codice principale ed una per i test). In quetso contesto, Maven definisce le seguenti
convenzioni:
• Ciò che si trova in rappresenta il codice principale, ovvero il co-
src/main/java
dice di produzione. Il codice presente in questa cartella sarà incluso nel JAR fi-
nale dell’applicazione. In particolare, il codice contenuto in questa cartella verrà
compilato nella directory e impacchettato in un JAR.
target/classes
• Ciò che si trova in contiene i test. Il codice presente in questa
src/test/java
cartella non sarà incluso nel JAR finale dell’applicazione. In particolare, il co-
dice contenuto in questa cartella verrà compilato nella directory target/test-
Quindi, gli Unit Test veranno eseguiti seguendo una convenzione di
classes.
denominazione, ma non saranno impacchettati nel JAR finale dell’applicazione.
N.B: Maven è un framework test-oriented. Pertanto, il plug-in m2e imposta auto