Maven Properties o parameter expressions de Maven

De ChuWiki
Saltar a: navegación, buscar

Cuando hacemos un plugin de Maven, es habitual poner este tipo de cosas en nuestra clase

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

de forma que cuando se ejecuta nuestro plugin, si no se indica lo contrario en la ejecución, el atributo saludo valdrá "Hola", como se indica en el comnentario.

Para que estos atributos estén inicializados con algunas propiedades de maven, como el directorio del proyecto, el classpath disponible, etc, se pueden poner expresiones como esta

/**
 * El parametro version.
 *
 * @parameter expression="${project.version}"
*/
private String version;

con lo que al ejecutarse nuestro plugin, version tendrá el número de versión del proyecto.

El problema es que no hay una documentación en la que se tenga una lista de todas estas expresiones. Por eso, extraída de http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide hago aquí una copia. Si conoces más expresiones, puedes editar y ampliar. Después de la lista, tienes más posibles formas de buscar este tipo de expresiones.

  • ${basedir} Directorio que contiene el pom.xml
  • ${version} Versión del proyecto, equivalente a ${project.version} o ${pom.version}
  • ${project.build.directory} Directorio target, el mismo que ${pom.project.build.directory}
  • ${project.name} o ${pom.name} es el nombre del proyecto.
  • ${project.version} o ${pom.version} es la versión del proyecto.
  • ${project.build.finalName} Nombre del fichero final generado, o sea, del .jar, .war, .ear o lo que sea.
  • ${settings.localRepository} Path del repositorio local de maven.
  • ${maven.repo.local} Idema al anterior.
  • ${env.M2_HOME} Path de instalación de maven.
  • ${java.home} Path al JRE_HOME.
  • Cualquiera que se ponga en el pom.xml como <properties>, como por ejemplo ${my.filter.value} si en el pom.xml ponemos
<project>
...
  <properties>
     <my.filter.value>hello</my.filter.value>
  </properties>
...
</project>
  • project.distributionManagementArtifactRepository
  • project.artifact
  • project.parent
  • project.file
  • project.artifacts
  • project.parentArtifact
  • project.pluginArtifacts
  • project.remoteArtifactRepositories
  • project.pluginArtifactRepositories
  • project.attachedArtifact
  • settings.offilne
  • settings.interactive
  • localRepository
  • reactorProjects

También están disponibles las propiedades de java con System.getProperties().

  • java.version
  • java.vendor
  • java.vendor.url
  • java.home
  • java.vm.specification.version
  • java.vm.specification.vendor
  • java.vm.specification.name
  • java.vm.version
  • java.vm.vendor
  • java.vm.name
  • java.specification.version
  • java.specification.vendor
  • java.specification.name
  • java.class.version
  • java.class.path
  • java.library.path
  • java.io.tmpdir
  • java.compiler
  • java.ext.dirs
  • os.name
  • os.arch
  • os.version
  • file.separator
  • path.separator
  • line.separator
  • user.name
  • user.home
  • user.dir

También he comprobado que las que empiezan con "project" vienen de los métodos get() de la clase MavenProject, por lo que mirando la API de MavenProject, se pueden obtener algunas de ellas. Es más, hay un MavenProject.getBuild() que devuelve una clase Build con métodos get(). Casualmente, las propiedades que empiezan por project.build son los get() de esa clase Build. Es una posible forma de investigar las propiedades disponibles.

Analizando estos ficheros XML, también se pueden sacar todas estas propiedades

y fijándonos es esa estructura de directorios, podemos suponer que va empaquetada -al ser resources/META-INF- en el jar de maven-core. Este jar está en el directorio lib de donde tengamos instalado maven, con el número de versión añadido. Si lo abrimos con winzip o lo desempaquetamos, veremos que efectivamente los tres primeros xml están.


Enlaces externos