Posted at

MavenでMANIFEST.MFにシステム時間を出力する

MavenでデプロイしているJavaのWebプロジェクトをMANIFEST.MFファイルに

「いつコンパイルしたのか」

を出力してほしいと言われて調べたのでメモ。


環境


  • Maven3.5.3

  • Java 1.8,0_181

  • Jenkinsでコンパイルをしていましたが多分あんまり関係ないです。


要件


  • jarファイルのMANIFEST.MFにMaven実行時のシステム時間を出力する。


なんとなくこだわる点。


  • AntRun Pluginは使わない。build.xml作りたくない。

  • コード書きたくない。


やり方


maven.build.timestampを使用する

まずMavenが準備しているプロパティmaven.build.timestampを使用する方法。

下記参考。

http://vbnmkyoto.blogspot.com/


pom.xml(抜粋)

<plugin>

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifestEntries>
<Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
</manifestEntries>
</archive>
</configuration>
</plugin>

フォーマット変更するにはmaven.build.timestamp.formatプロパティでフォーマットを指定すればいい。


pom.xml(抜粋)

<properties>

<maven.build.timestamp.format>yyyyMMhhmmss</maven.build.timestamp.format>
</properties>

こうするとMANIFEST.MFにはこんな感じで出ます。


MANIFEST.MF

Build-Timestamp:20181129115959


らくちん・・・なんだけど、Maven3.2.2以降では出力する時刻がUTCになってしまった。

https://issues.apache.org/jira/browse/MNG-5452

日本で普通に仕事する分にはやはり不便。

タイムゾーン設定できればいいのだけど、そんなプロパティのようなものは見つからず。


Build Helper Maven Pluginを使用する

そんな感じでほかのものを探して、Build Helper Maven Pluginを使用してみました。

下記参考。

https://stackoverflow.com/questions/28281988/how-to-have-maven-show-local-timezone-in-maven-build-timestamp


pom.xml(抜粋)

<plugin>

<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>build.time</name>
<pattern>yyyyMMddHHmmss</pattern>
<locale>ja_JP</locale>
<timeZone>Asia/Tokyo</timeZone>
</configuration>
</execution>
</executions>
</plugin>

出力する箇所の記載にはnameの設定値を設定してあげる。


pom.xml(抜粋)

<plugin>

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifestEntries>
<Build-Timestamp>${build.time}</Build-Timestamp>
</manifestEntries>
</archive>
</configuration>
</plugin>

これでMANIFEST.MFに日本時間通りのビルド実行時間が出力されました。


参考

https://www.mojohaus.org/build-helper-maven-plugin/usage.html

便利そうなのでもうちょっと調べてみてもいいかも。