En los ficheros pom.xml de maven podemos poner properties de esta manera
<project>
…
<properties>
<nombrePropiedad1>valor1</nombrePropiedad1>
<nombrePropiedad2>valor2</nombrePropiedad2>
…
</properties>
…
Por supuesto, si tenemos un proyecto grande compuesto de varios subproyectos maven, los proyectos hijos heredan las propiedades del padre. Podemos obtener el valor de estas propiedades poniendo ${nombrePropiedad1} donde sea necesario.
¿Para qué sirve todo esto?. Pues gracias a Random thoughts by Ceki Gülcü he encontrado una posibilidad estupenda, que además me soluciona un problema que me traía de cabeza desde hace tiempo.
El tema es que tengo proyectos maven grandes, con varios subproyectos dentro y algunos de ellos incluso con otros subproyectos. En ellos, hay dependencias repetidas, digamos, por ejemplo, que los subproyectos A, B y C tiran de unaLibreria-1.2.jar. Pues bien, esa dependencia con ese número de versión está en los pom.xml de A, B y C
<dependency>
<groupId>un.group.id</groupId>
<artifactId>unaLibreria</artifactId>
<version>1.2</version>
</dependency>
Muchas veces, esa librería es una librería nuestra interna y su número de versión se actualiza con cierta frecuencia. Cuando cambiamos este número de versión, hasta ahora no nos quedaba más remedio que ir rebuscando esta dependencia por todos los pom.xml de los subproyectos para cambiarla.
Pues bien, con esto de las propiedades, hay una solución mucho más sencilla. En el pom.xml de proyecto padre/raíz, ponemos una propiedad tal que así
<properties>
<unaLibreriaVersion>1.2</unaLibreriaVersion>
…
</properties>
y en la dependencia de los subproyectos, ponemos
<dependency>
<groupId>un.group.id</groupId>
<artifactId>unaLibreria</artifactId>
<version>${unaLibreriaVersion}</version>
</dependency>
De esta forma, cuando cambia la versión de la librería, sólo tenemos que cambiar el valor de la propiedad en el pom.xml del proyecto raíz/padre.
Una pequeña maravilla de la técnica.
Pingback: Diario de Programación » Blog Archive » Problemilla con las properties de Maven