Diferencia entre revisiones de «Información del build con Maven»

De Dos Ideas.
Saltar a: navegación, buscar
(Configuración de Maven)
(Ver también)
 
Línea 107: Línea 107:
 
* [http://java.dzone.com/tips/stamping-version-number-and Stamping version number with Maven]
 
* [http://java.dzone.com/tips/stamping-version-number-and Stamping version number with Maven]
 
* [http://maven-svn-revision-number-plugin.googlecode.com/svn/site/examples/resource_filtering.html Maven SVN Revision plugin]
 
* [http://maven-svn-revision-number-plugin.googlecode.com/svn/site/examples/resource_filtering.html Maven SVN Revision plugin]
 +
* [http://www.innovationontherun.com/creating-a-build-number-with-ant-and-subversion/ Creating a Build Number With Ant and Subversion]
 +
* [http://obscuredclarity.blogspot.com.ar/2010/08/java-ant-build-war-file-with-auto.html  Java Ant - Build .War file with Auto-Incrementing Build Number]

Revisión actual del 13:37 30 mar 2012

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