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/
<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プロパティでフォーマットを指定すればいい。
<properties>
<maven.build.timestamp.format>yyyyMMhhmmss</maven.build.timestamp.format>
</properties>
こうすると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
<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の設定値を設定してあげる。
<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
便利そうなのでもうちょっと調べてみてもいいかも。