Maven properties o parameter expressions

El otro día, por jugar un poco, me puse a hacer un plugin de maven, para ver cómo va el tema.

Pues es mas fácil de lo que parece. Por supuesto, con el mismo maven creamos un proyecto para desarrollar nuestro plugin

mvn archetype:create
  -DgroupId=com.chuidiang.ejemplos.plugin_maven
  -DartifactId=plugin_maven
  -DarchetypeArtifactId=maven-archetype-mojo

o sea, igual que cualquier otro proyecto, pero indicando con -DarchetypeArifactId que queremos hacer un plugin con esa palabreja tan  rara de mojo. Al ejecutar este comando, nos sale un proyecto maven con una clase con el plugin en plan ejemplo ya creada. Sólo tenemos que tocar a nuestro gusto.

Con un simple mvn install, se instala nuestro plugin y ya lo tenemos disponible.

Dentro del código java del plugin, hay atributos declarados así:

/**
* El parametro saludo.
*
* @parameter expression="Hola"
*/
private String saludo;

cuando se ejecute nuestro plugin, maven se encargará de rellenar nuestro atributo "saludo" con la "expression" que hayamos puesto en el @parameter. En nuestro caso, cuando se ejecute nuestra clase plugin, saludo tendrá el valor "Hola":

Es posible en ese @parameter expression poner cosas como esta

@parameter expression="${project.version}"

con lo que nuestro atributo se rellenaría con el número de versión de nuestro proyecto. Estupendo y maravilloso pero, como no, nos surgen problemas. Una vez que ves el ejemplo te dedicas a buscar una lista de posibles expresiones que puedes poner. Sí, sí, la versión del proyecto, pero ¿qué más cosas tengo disponibles?. Pues bien, ahí está el problema. No existe una documentación con esa lista.

Investigando, investigando, he descubierto tres cosas a partir de las cuales sacar estas posibles expresiones.

  • La primera es que si en mi plugin pongo expression="${project}" y el tipo de atributo Object y el código se dedica a investigar qué es lo que obtengo, resulta que tengo una clase MavenProject. Tirando del hilo, descubro que los get de esta clase son el segundo nivel de propiedad. Es decir, existe project.version porque hay un MavenProject.getVersion(). Y existe ${project.build.directory} porque se puede hacer MavenProject.getBuild().getDirectory(). De esta forma, la API de MavenProject nos puede ayudar a sacar posibles expresiones.
  • En este enlace hay una lista de propiedades que la gente ha recopilado.
  • En el directorio lib de donde tenemos instalado maven, tenemos un maven-core-xxx.jar. Ahí dentro, en el directorio META-INF/maven/plugin-expressions tenemos tres ficheros xml en el que se indican los posibles nombres de propiedades y el tipo de dato que pueden contener.

Yo por mi parte y por supuesto, he hecho mi propio resumen de los parámetros maven en la Chuwiki. Si estais interesados en el tema, estais invitados a colaborar ampliando o completando esa lista.

Esta entrada fue publicada en maven. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.