Agregar la fecha actual con filtrado Maven2
Tengo un proyecto Maven2, y necesito agregar, en un archivo de propiedades, la versión actual y la fecha actual.
Para la versión actual, he usado ${project.version}
, que funciona correctamente.
Mi pregunta es cómo puedo establecer la fecha actual (es decir, la fecha en que Maven2 realiza la compilación) en mi archivo de propiedades:
client.version=Version ${project.version}
client.build=???
(además, si puedo especificar el formato para la fecha, será realmente genial)
8 answers
Puedes usar el plugin Maven Buildnumber para esto:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat>
</configuration>
</plugin>
</plugins>
</build>
La fecha está entonces disponible en la propiedad {{buildNumber}.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-05 18:17:44
La característica no funciona con el filtrado de recursos maven 2.2.1.
Véase: http://jira.codehaus.org/browse/MRESOURCES-99
Pero podría crear una propiedad personalizada en el pom padre:
<properties>
<maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
<buildNumber>${maven.build.timestamp}</buildNumber>
</properties>
Donde buildNumber es la nueva propiedad que se puede filtrar en los recursos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-16 15:37:42
Desde Maven 2.1 M1, ahora puede hacer ${maven.build.timestamp}
siempre que también defina ${maven.build.timestamp.format}
<properties>
...
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
...
</properties>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-06 07:17:19
La respuesta de Thomas Martí es un paso en la dirección correcta, pero hay un enfoque más simple que no requiere una declaración ficticia <scm>
en el POM. Usa el buildnumber-maven-plugin
, pero usa el objetivo create-timestamp
. La documentación no está clara; así es como se ve obtener una fecha en formato YYYY-MM-DD
y ponerla en la propiedad build.date
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<configuration>
<timestampFormat>yyyy-MM-dd</timestampFormat>
<timestampPropertyName>build.date</timestampPropertyName>
</configuration>
</plugin>
Fuera de la caja esto no funcionará en Eclipse con m2e, por lo que tendrá que agregar lo siguiente dentro de la sección POM <build>
:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<versionRange>[1.2,)</versionRange>
<goals>
<goal>create-timestamp</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Esto le dice a m2e que desea para seguir adelante y ejecutar el plugin al construir dentro de Eclipse.
Ahora, cuando se construye dentro o fuera de Eclipse, la marca de tiempo se genera correctamente y funciona con el filtrado de recursos!
Es una pena que la funcionalidad tan simple tenga que ser tan difícil...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-21 16:57:24
Otra solución es usar Groovy dentro del pom.xml (quizás no tan apropiado como la solución propuesta por Thomas Marti):
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
import java.util.Date
import java.text.MessageFormat
def vartimestamp = MessageFormat.format("{0,date,yyyyMMdd-HH:mm:ss}", new Date())
project.properties['buildtimestamp'] = vartimestamp
</source>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Y luego use la propiedad buildtimestamp
:
client.version=${pom.version}
client.build=${buildtimestamp}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-14 15:54:09
Esto funcionó para mí. Todo lo que quería era la marca de tiempo.
En el pom...
<properties>
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
<dev.build.timestamp>${maven.build.timestamp}</dev.build.timestamp>
</properties>
...
<overlay>
<groupId>mystuff</groupId>
<artifactId>mystuff.web</artifactId>
<filtered>true</filtered>
</overlay>
Y en un archivo JSP...
<div>Built: ${dev.build.timestamp}</div>
El resultado del ejemplo es...
<div>Built: 20130419-0835</div>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-19 16:41:40
Pegue ${build.time}
en un archivo de propiedades y lo siguiente en pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
<timestampPropertyName>build.time</timestampPropertyName>
</configuration>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
También vea la documentación del buildnumber-maven-plugin.
(Otras respuestas me acercaron especialmente a Garret Wilson, pero su configuración de eclipse no fue necesaria para mí y me hizo ignorar su respuesta, así que estoy publicando exactamente lo que funcionó para mí.)
Como un bono si desea obtener dos propiedades, una para la fecha y otra para la hora, así es como lo hace:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>build.date</id>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
<configuration>
<timestampFormat>yyyy-MM-dd</timestampFormat>
<timestampPropertyName>build.date</timestampPropertyName>
</configuration>
</execution>
<execution>
<id>build.time</id>
<phase>initialize</phase>
<goals>
<goal>create-timestamp</goal>
</goals>
<configuration>
<timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
<timestampPropertyName>build.time</timestampPropertyName>
</configuration>
</execution>
</executions>
</plugin>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-03 17:24:39
Es trabajo para mí en maven 2.1.0
Ma {maven.construir.fecha y hora}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-24 18:28:02