web-dev-qa-db-fra.com

Comment faire pour que Maven affiche le fuseau horaire local dans maven.build.timestamp?

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.

25
Eric B.

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é.

15
alexanderific

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>
2
Ortomala Lokni

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.

0
Augustin Ghauratto

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>
0
Ognjen Mišić