Dans Maven 3.2.2+, le maven.build.timestamp
a été redéfini pour afficher l'heure en UTC, conformément à MNG-5452 .
Existe-t-il un moyen de spécifier que je veux les informations de fuseau horaire dans mon fuseau horaire local et non pas au format UTC? J'ai brièvement parcouru les sources maven, mais je ne vois pas quand même préciser que je veux que la TZ soit locale et non basée sur UTC.
Comme déjà mentionné, dans les versions actuelles de Maven (au moins jusqu'à la version 3.3. +), La propriété maven.build.timestamp
n'autorise pas les remplacements de fuseau horaire.
Toutefois, si vous souhaitez utiliser un nom de propriété différent pour vos besoins, le fichier build-helper-maven-plugin vous permet de configurer des horodatages personnalisés à diverses fins. Voici un exemple pour configurer l’horodatage actuel dans EST lors d’une construction.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>build.time</name>
<pattern>MM/dd/yyyy hh:mm aa</pattern>
<locale>en_US</locale>
<timeZone>America/Detroit</timeZone>
</configuration>
</execution>
</executions>
</plugin>
Ensuite, vous pouvez utiliser la propriété ${build.time}
au lieu de ${maven.build.timestamp}
pour laquelle vous avez besoin d’un horodatage de la construction dans votre fuseau horaire préféré.
Je pense qu'il n'y a pas de solution Maven pure mais vous pouvez utiliser une tâche Ant.
En suivant les instructions données dans le livre de recettes du développeur du plug-in Maven }, vous pouvez générer un fichier filter.properties
avec la tâche ant <tstamp>
. Dans cet élément, vous pouvez personnaliser votre horodatage avec le même modèle de date/heure que la classe SimpleDateFormat et également utiliser la classe Timezone . Vous pouvez ensuite utiliser ${build.time}
. Par défaut, il utilisera votre fuseau horaire local.
1) Utilisez le maven-antrun-plugin
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<!-- Safety -->
<mkdir dir="${project.build.directory}"/>
<tstamp>
<format property="last.updated" pattern="yyyy-MM-dd HH:mm:ss"/>
</tstamp>
<echo file="${basedir}/target/filter.properties" message="build.time=${last.updated}"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
2) Activer le filtrage
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>${basedir}/target/filter.properties</filter>
</filters>
Il n'y a pas d'autre solution que de contourner le problème. Utilisez-vous maven buildnumber-maven-plugin plugin? Si c'est le cas, vous pouvez l'utiliser pour générer une révision et construire l'horodatage. Cet horodatage sera basé sur la configuration de votre fuseau horaire Java local.
Edit: Néanmoins, la question concerne timestamp
, comme l'a souligné Dean Schulze , seule la première execution
cassera ${buildNumber}
. Pour résoudre ce problème, vous devez ajouter une autre variable execution
à votre configuration, qui créera buildRevision
. Exemple mis à jour, ci-dessous . Par exemple: `
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<inherited>true</inherited>
<executions>
<execution>
<id>generate-timestamp</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss Z}</format>
<items>
<item>timestamp</item>
</items>
<buildNumberPropertyName>buildDateTime</buildNumberPropertyName>
<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
</configuration>
</execution>
<execution>
<id>generate-buildnumber</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<revisionOnScmFailure>0</revisionOnScmFailure>
<useLastCommittedRevision>true</useLastCommittedRevision>
<buildNumberPropertyName>buildRevision</buildNumberPropertyName>
</configuration>
</execution>
</executions>
Alors vous pouvez utiliser ${buildDateTime}
où vous voulez injecter votre variable timestamp. Une autre exécution avec le même objectif stockera également votre révision.
Ce que j’ai fait mais que je ne pourrais pas appliquer à d’autres personnes est que j’exporte une variable d’environnement en bash
buildtimestamp=$(date +%H:%M)
puis le consommer dans pom.xml lors de la construction de mon projet.
<properties>
<timestamp>${buildtimestamp}</timestamp>
</properties>