J'ai un projet Maven2, et je dois ajouter, dans un fichier de propriétés, la version actuelle et la date actuelle.
Pour la version actuelle, j'ai utilisé ${project.version}
, qui fonctionne correctement.
Ma question est de savoir comment puis-je définir la date actuelle (c'est-à-dire la date à laquelle la construction est effectuée par Maven2) dans mon fichier de propriétés:
client.version=Version ${project.version}
client.build=???
(en plus, si je peux spécifier le format de la date, ce sera vraiment super)
Vous pouvez utiliser le Maven Buildnumber Plugin pour cela:
<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 date est alors disponible dans la propriété $ {buildNumber}.
La fonctionnalité ne fonctionne pas avec le filtrage des ressources maven 2.2.1.
Voir: https://issues.Apache.org/jira/browse/MRESOURCES-99
Mais vous pouvez créer une propriété personnalisée dans le pom parent:
<properties>
<maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
<buildNumber>${maven.build.timestamp}</buildNumber>
</properties>
Où buildNumber est la nouvelle propriété qui peut être filtrée dans les ressources.
Depuis Maven 2.1 M1, vous pouvez maintenant faire ${maven.build.timestamp}
à condition de définir également ${maven.build.timestamp.format}
<properties>
...
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
...
</properties>
La réponse de Thomas Marti est un pas dans la bonne direction, mais il existe une approche plus simple qui ne nécessite pas de mannequin <scm>
déclaration dans le POM. Utilisez le buildnumber-maven-plugin
, mais utilisez le create-timestamp
objectif. La documentation n'est pas claire; voici à quoi ça ressemble pour avoir une date dans YYYY-MM-DD
format et le mettre dans le build.date
propriété:
<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>
Hors de la boîte, cela ne fonctionnera pas dans Eclipse avec m2e, vous devrez donc ajouter ce qui suit à l'intérieur du POM <build>
section:
<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>
Cela indique à m2e que vous voulez qu'il aille de l'avant et exécute le plugin lors de la construction dans Eclipse.
Désormais, lorsque vous construisez à l'intérieur ou à l'extérieur d'Eclipse, l'horodatage est correctement généré et fonctionne avec le filtrage des ressources!
C'est dommage qu'une fonctionnalité si simple doive être si difficile ...
Une autre solution consiste à utiliser Groovy dans le pom.xml (peut-être pas aussi approprié que la solution proposée par 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>
puis utilisez la propriété buildtimestamp
:
client.version=${pom.version}
client.build=${buildtimestamp}
Cela a fonctionné pour moi. Tout ce que je voulais, c'était l'horodatage.
Dans le 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>
Et dans un fichier JSP ...
<div>Built: ${dev.build.timestamp}</div>
L'exemple de résultat est ...
<div>Built: 20130419-0835</div>
ça marche pour moi chez maven 2.1.0
$ {maven.build.timestamp}