Maven 3.2.2+では、maven.build.timestamp
は、 MNG-5452 に従ってUTCで時刻を表示するように再定義されました。
UTCではなくローカルタイムゾーンでタイムゾーン情報が必要であることを指定する方法はありますか?私は簡単にMavenのソースを閲覧しましたが、とにかくTZをUTCベースではなくローカルTZにしたいということを指定しません。
すでに述べたように、Mavenの現在のバージョン(少なくともバージョン3.3。+まで)では、maven.build.timestamp
プロパティはタイムゾーンのオーバーライドを許可しません。
ただし、目的に応じて異なるプロパティ名を使用しても問題ない場合は、 build-helper-maven-plugin を使用すると、さまざまな目的でカスタムタイムスタンプを設定できます。ビルド中にESTで現在のタイムスタンプを構成する例を次に示します。
<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>
次に、${build.time}
の代わりに${maven.build.timestamp}
プロパティを使用して、希望のタイムゾーンでビルドのタイムスタンプが必要な場合に使用できます。
純粋なMavenソリューションはありませんが、Antタスクを使用できます。
Maven plugin developers cookbook に記載されている指示に従って、filter.properties
antタスクで<tstamp>
ファイルを生成できます。この要素では、 SimpleDateFormatクラス と同じ日付/時刻パターンでタイムスタンプをカスタマイズし、 Timezoneクラス も使用できます。その後、${build.time}
を使用できます。デフォルトでは、ローカルタイムゾーンが使用されます。
1)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)フィルタリングを有効にする
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>${basedir}/target/filter.properties</filter>
</filters>
回避策以外に解決策はありません。 maven buildnumber-maven-plugin pluginを使用したことがありますか?その場合、それを使用してリビジョンを生成し、タイムスタンプを作成できます。このタイムスタンプは、ローカルのJavaタイムゾーン設定に基づいています。
編集:それにもかかわらず、質問はtimestamp
に関するものです。 Dean Schulze が指摘したように、最初のexecution
のみが${buildNumber}
を破ります。これを修正するには、execution
を作成する別のbuildRevision
を構成に追加する必要があります。以下の例を更新しました。例: `
<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>
タイムスタンプ変数を挿入したい場所で${buildDateTime}
を使用できます。同じ目標を持つ別の実行でも、リビジョンが保存されます。
私がやったが、他の人には適用されないかもしれないのは、bashで環境変数をエクスポートすることです
buildtimestamp=$(date +%H:%M)
そして、プロジェクトをビルドするときにpom.xmlでそれを使用します。
<properties>
<timestamp>${buildtimestamp}</timestamp>
</properties>