Información del build con Maven

De Dos Ideas.
Saltar a: navegación, buscar

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.

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:

  1. Activar el filtrado de recursos, para que cambie los placeholders.
  2. Activar el módulo de información de SVN.
  3. 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>

Ejecución y resultado final

Al ejecutar el build se filtrará el archivo projectInfo.properties y se llenarán los valores. Este archivo quedará empaquetado en el resultado final de la siguiente manera. Por ejemplo: project.version=1.0 project.build.date=2012-03-28 04:07

project.svn.repository=https://100.200.0.100/svn/dosideas project.svn.path=trunk/dosideas project.svn.revision=598 project.svn.mixedRevisions=false project.svn.committedRevision=598 project.svn.committedDate=2012-03-27 13:07:14 +1200 (Tue, 27 Mar 2012) project.svn.status=M project.svn.specialStatus=M

Uso en un JSP

Teniendo este archivo, es muy facil usar esta información en un JSP: <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <fmt:setBundle basename="projectInfo"/>

Informacion del build

Fecha del build: <fmt:message key="project.build.date"/>

Revision: <fmt:message key="project.svn.revision"/>

Fecha de la Revision: <fmt:message key="project.svn.committedDate"/>

Ver también