web-dev-qa-db-ja.com

Mavenでmaven.build.timestampのローカルタイムゾーンを表示するにはどうすればよいですか?

Maven 3.2.2+では、maven.build.timestampは、 MNG-5452 に従ってUTCで時刻を表示するように再定義されました。

UTCではなくローカルタイムゾーンでタイムゾーン情報が必要であることを指定する方法はありますか?私は簡単にMavenのソースを閲覧しましたが、とにかくTZをUTCベースではなくローカルTZにしたいということを指定しません。

26
Eric B.

すでに述べたように、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}プロパティを使用して、希望のタイムゾーンでビルドのタイムスタンプが必要な場合に使用できます。

18
alexanderific

純粋な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>
2
Ortomala Lokni

回避策以外に解決策はありません。 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}を使用できます。同じ目標を持つ別の実行でも、リビジョンが保存されます。

0

私がやったが、他の人には適用されないかもしれないのは、bashで環境変数をエクスポートすることです

buildtimestamp=$(date +%H:%M)

そして、プロジェクトをビルドするときにpom.xmlでそれを使用します。

<properties>
    <timestamp>${buildtimestamp}</timestamp>
</properties>
0
Ognjen Mišić