Información del build con Maven
Usando Maven es posible obtener información del build para ser usada en tiempo de ejecución. La idea general es guardar esta información (hora del build, versión del repositorio de código, etc.) en un archivo de texto, que luego la aplicación puede usar en tiempo de ejecución.
Durante el build, Maven permite filtrar los archivos de recursos y reemplazar placeholders con valores de variables de Maven. De esta manera, la estrategia será crear un archivo .properties con placeholders, que luego Maven se encargará de reemplazar al momento de hacer el build.
Contenido
Ejemplo de uso
Vamos a usar un archivo projectInfo.properties que tendrá información general del build e información sobre los fuentes en el SVN.
El archivo projectInfo.properties
Este archivo de propiedades está ubicado junto al resto de los recursos del proyecto, para que sea accesible en tiempo de ejecución por la aplicación.
project.version=${pom.version}
project.build.date=${project.build.timestamp}
project.svn.repository=${project.svn.repository} project.svn.path=${project.svn.path} project.svn.revision=${project.svn.revision} project.svn.mixedRevisions=${project.svn.mixedRevisions} project.svn.committedRevision=${project.svn.committedRevision} project.svn.committedDate=${project.svn.committedDate} project.svn.status=${project.svn.status} project.svn.specialStatus=${project.svn.specialStatus}
Configuración de Maven
Es necesario configurar Maven, con los siguientes pasos:
- Activar el filtrado de recursos, para que cambie los placeholders.
- Activar el módulo de información de SVN.
- Crear una variable explícita con la hora del build, por un bug en Maven.
El archivo pom.xml queda:
<project>
...
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins>
...
<plugin> <groupId>com.google.code.maven-svn-revision-number-plugin</groupId> <artifactId>maven-svn-revision-number-plugin</artifactId> <version>1.7</version> <executions> <execution> <goals> <goal>revision</goal> </goals> </execution> </executions> <configuration> <entries> <entry> <prefix>project.svn</prefix> </entry> </entries> </configuration> </plugin> </plugins> </build>
<properties> <project.build.timestamp>${maven.build.timestamp}</project.build.timestamp> <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format> </properties>
</project>
Al ejecuta