LoginSignup
2
3

More than 5 years have passed since last update.

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

Posted at

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
便利そうなのでもうちょっと調べてみてもいいかも。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3