2015-02-02 4 views
21

In Maven 3.2.2+ wurde die maven.build.timestamp neu definiert, um die Zeit in UTC anzuzeigen, gemäß MNG-5452.Wie kann Maven die lokale Zeitzone in maven.build.timestamp anzeigen?

Gibt es eine Möglichkeit, anzugeben, dass ich die Zeitzoneninfo in meiner lokalen Zeitzone und nicht in UTC möchte? Ich habe kurz die Maven-Quellen durchsucht, sehe aber trotzdem nicht, dass ich möchte, dass die TZ lokal TZ und nicht UTC-basiert ist.

Antwort

2

Ich denke, es gibt keine reine Maven-Lösung, aber Sie können eine Ant-Aufgabe verwenden.

Befolgen Sie die Anweisungen in der Maven plugin developers cookbook, können Sie eine filter.properties Datei mit der <tstamp> Ant Task generieren. In diesem Element können Sie Ihren Zeitstempel mit demselben Datums-/Uhrzeitmuster wie das SimpleDateFormat class anpassen und auch das Timezone class verwenden. Sie können dann ${build.time} verwenden, standardmäßig wird Ihre lokale Zeitzone verwendet.

1) Verwenden 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) Aktivieren Filterung

<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
</resources> 
<filters> 
    <filter>${basedir}/target/filter.properties</filter> 
</filters> 
0

es keine Lösung gibt, sondern auf Abhilfe. Haben Sie zufällig maven buildnumber-maven-plugin Plugin verwendet? Wenn ja, können Sie damit eine Revision für Sie erstellen und einen Zeitstempel erstellen. Dieser Zeitstempel basiert auf Ihrer lokalen Java-Zeitzonenkonfiguration.

Edit: Dennoch Frage ist über timestamp, wie Dean Schulze wies darauf hin, nur erste execution${buildNumber} brechen. Um das zu beheben, müssen Sie Ihrer Konfiguration einen weiteren execution hinzufügen, der buildRevision erstellt. Aktualisiertes Beispiel, unten. Für ex. `

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

als Sie ${buildDateTime} verwenden können, wo Sie Ihre Zeitstempel Variable injizieren wollen. Eine andere Ausführung mit demselben Ziel speichert auch die Revision.

+0

Das überschreibt die '$ {buildNumber}' –

+0

die ich bearbeitet habe und fügte eine weitere Ausführung hinzu, die das 'buildRevision' erzeugt. –

12

Wie bereits erwähnt, erlaubt die Eigenschaft maven.build.timestamp in den aktuellen Versionen von Maven (mindestens bis Version 3.3. +) Keine Zeitzonenüberschreibungen.

Wenn Sie jedoch einen anderen Eigenschaftsnamen für Ihre Zwecke verwenden möchten, können Sie mit der build-helper-maven-plugin benutzerdefinierte Zeitstempel für eine Vielzahl von Zwecken konfigurieren. Hier ist ein Beispiel, um den aktuellen Zeitstempel in EST während eines Builds zu konfigurieren.

 <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>EST</timeZone> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Dann können Sie die ${build.time} Eigenschaft statt ${maven.build.timestamp} nutzen, wo Sie einen Zeitstempel des Build in Ihrer bevorzugten Zeitzone benötigen.

+0

Sie sagen" ... die maven.build.timestamp Eigenschaft erlaubt Zeitzonenüberschreibungen ". Solltest du sagen ** erlaubt ** nicht das Überschreiben von Zeitzonen? –

+0

guten Fang. in der Antwort fixieren. Vielen Dank! – alexanderific

+0

:) danke dafür. Ich brauchte eine Weile, um die Seite zu recherchieren –

-2

Kein Workaround erforderlich.

META-INF Informationen über Zusammenstellung von jar oder war, speziell wird Build-Dateimmer in UTC - es ist Systemzeit.

Wenn Sie dem Benutzer Informationen in der Benutzeroberfläche anzeigen, verwenden Sie seine Locale Einstellungen/Einstellungen und transformieren Sie die UTC-Zeit in seine Zeitzone.

Verwandte Themen