Diferencia entre revisiones de «Información del build con Maven»
(→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.
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>
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"/>