Le informazioni che identificano un univocamente progetto Maven, sia esso un progetto singolo o un modulo di un progetto più ampio, sono: groupId
, artifactId
e version
. Se non diversamente specificato valorizzando la proprietà <fileName>
nella sezione <build>
, le proprietà artifactId
e version
contribuiscono alla definizione del nome dell’artefatto che la fase di package produce, secondo l’espressione: ${artifactId}-${version}
.
In questo breve articolo mostriamo come sia semplice uniformare il numero di versione su tutti gli artefatti prodotti dai diversi moduli di un progetto Maven. Sfortunatamente, infatti, i moduli non ereditano il numero di versione dal progetto principale, abbiamo quindi la necessità di definire una proprietà visibile a tutti sotto-progetti.
Il Problema
Consideriamo un semplice progetto composto da due soli moduli: module_a
e module_b
, come mostrato nell’immagine seguente.
Se eseguiamo il package del progetto Maven genererà due artefatti, uno per ciascun modulo, che avranno nome:
module_a-
[versione modulo a]module_b-
[versione modulo b]
dove [versione modulo a/b] è il numero di versione definito nei rispettivi file pom.xml
. Mantenere il numero di versione nel nome dell’artefatto è, in generale, una buona pratica, perchè ci consente di avere un maggiore controllo sulla gestione del processo di deploy.
Supponiamo di avere due artefatti, un EAR ed un WAR, che vengono installati su un Application Server e di voler conoscere quale sia la versione deployata dell’applicativo. Con una rapida ispezione visiva siamo in grado di dare una risposta certa. Quando però dobbiamo eseguire il deploy di una nuova versione dobbiamo modificare la proprietà <version>
su tutti i pom.xml
del progetto, operazione che può risultare tediosa, se i moduli sono parecchi, e suscettibile di errore umano.
La Soluzione
La soluzione, come accennavamo nell’introduzione, è quella di utilizzare una proprietà definita nel pom.xml
del progetto principale ed utilizzare tale proprietà in tutti i tag <version>
di tutti i pom, anche in quello del progetto padre, come mostrato di seguito.
Progetto Principale | |||||
|
|||||
module_a | module_b | ||||
|
|
Se eseguiamo ora il package del progetto il risultato sarà di avere tutti gli artefatti con lo stesso numero di versione, come mostrato in figura.
Codice Sorgente
Il codice sorgente completo è scaricabile qui: maven-version.