Sostituzione Valori in File di Property con Maven

Oltre ad essere uno strumento fondamentale per la gestione delle dipendenze ed il build dei progetti, Maven offre diverse caratteristiche interessanti tra le quali la possibilità di gestire file di property con variabili, denotate dal delimitatore ${..}, che vengono valorizzate al momento del packaging della soluzione.

Resource Folder

Maven introduce una struttura standard delle cartelle di lavoro, tra le quali la cartella delle risorse è quella destinata a contenere tutti i file (non java) che devono essere inserite nel pacchetto finale (ad esempio un JAR). Di default tale cartella è localizzata nella directory src/maven/resources. Per modificarne il percorso o inserirne di altri è sufficiente configurarli nella sezione <build> del pom.xml:

Per completezza si noti che tale gestione è realizzata dal Maven Resource Plugin, un plugin che non è necessario configurare nel pom.

Filtering

Il filtering delle risorse è la soluzione offerta da Maven per la valorizzazione delle variabili nei file di property. Innanzitutto è necessario dichiarare la risorsa come filtrabile:

Quindi possiamo inserire le variabili all’interno del file di property di interesse delimitandole con ${...} e Maven si occuperà di valorizzarle. I valori con cui valorizzare le variabili possono provenire da diverse sorgenti:

Proprietà Implicite

Esistono diverse proprietà definite in modo implicito in un progetto maven, distinte in tre categorie:

project.*

Referenziano proprietà definite nel pom: project.version, project.groupId, project.artifactId, project.name, project.description, etc.

settings.* Referenziano proprietà definite nel file di settings /.m2/settings.xml.
env.*  Referenziano le variabili di ambiente: env.PATH, env.HOME, env.JAVA_HOME, etc.

Proprietà Definite

Nel pom.xml è possibile definire delle proprietà personalizzate nella sezione <propeteis>.

Filtri

Uno possibile utilizzare un file di assegnazioni valiabile-valore ed utilizzarlo come filtro nella sezione <build> del pom.

Uso dei Profili

Probabilmente lo strumento più interessante di Maven è l’utilizzo dei profili. Grazie ad essi è possibile sostituire valori differenti nei file di property in base al profilo selezionato. Molto semplicemente è sufficiente utilizzare la sezione <properties> e/o <filters> all’interno della definizione del profilo.

Esempio Pratico

Creiamo un semplice progetto Maven vuoto e strutturiamo la cartella /src nel seguente modo:

I file nelle cartelle filters e resources hanno il seguente contenuto:

config.properties
value.from.properties.section=${it.javaboss.msg}
value.from.maven.variable=${project.version}
value.from.filter.file=${test.value}
value.from.profile.param=${it.javaboss.parameter}
value.from.profile.filter=${env.value}
filter.properties
test.value=1000
 filter-dev.properties
env.value=DEV
filter-prod.properties
env.value=PROD

Il file pom.xml ha invece la seguente struttura.

A questo punto è sufficiente eseguire l’istruzione mvn clean package -P dev per ottenere il file config.properties così valorizzato:

Codice Sorgente

Il codice sorgente per l’esempio presentato è scaricabile qui maven.