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, extraida de http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide hago aquí una copia. Si conoces más expresiones, puedes editar y ampliar.

  • ${basedir} represents the directory containing pom.xml
  • ${version} equivalent to ${project.version} or ${pom.version}
  • ${project.build.directory} results in the path to your "target" dir, this is the same as ${pom.project.build.directory}
  • ${project.name} or ${pom.name} refers to the name of the project.
  • ${project.version} or ${pom.version} refers to the version of the project.
  • ${project.build.finalName} refers to the final name of the file created when the built project is packaged
  • ${settings.localRepository} refers to the path of the user's local repository.
  • ${maven.repo.local} also works for backward compatibility with maven1 ??
  • ${env.M2_HOME} returns the Maven2 installation path.
  • ${java.home} specifies the path to the current JRE_HOME environment use with relative paths to get for example:
  • 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
  • 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