🐘

Gitのタグやハッシュの情報をバージョン情報として埋め込む(Gradle)

2022/01/07に公開

JavaのGradleプロジェクトで、バージョン情報としてGitのタグやハッシュの情報を埋め込む方法を記載します。

動作確認時のバージョンは下記の通りです。

  • Java 8
  • Gradle 7.3.2

下記に動作確認に使ったプロジェクトを登録しています。

埋め込む情報

どのような状態で生成されたものかわかるように、下記のように設定することにします。

  • versionプロパティ(jarに付与したり、ライブラリのバージョンとして利用されるもの) :
    Gitのタグの情報を元にしたもの。
    • タグがv1.1.2ならば、1.1.2となるように。
      v1.0.0-beta1となっていたら、1.0.0-beta1といった形で。(-beta1の部分が付いていても問題無い)
  • META-INF/MANIFEST.MFImplementation-Version :
    Gitのタグ+コミットハッシュ値も付与。
    • タグがv1.1.2ならば、ハッシュ(8桁)も付与して1.1.2.f15325d3となるように。
      v1.0.0-beta1となっていたら1.1.2-beta1.f15325d3といった形で。

com.palantir.git-version プラグイン

Gitの各種情報取得のために com.palantir.git-version プラグインを利用します。

git describe --tags --always --first-parent と同じような情報が取れるようになっています。

build.gradle の設定

build.gradleへの設定内容を記載します。

全体については下記をご参照ください。

プラグインの追加

com.palantir.git-version を利用するプラグインとして指定します。

plugins {
    id 'java'
    id 'com.palantir.git-version' version '0.12.3'
}

version プロパティ、Implementation-Version への設定

Gradleのversionプロパティにタグの情報を元にしたものを設定します。
また、META-INF/MANIFEST.MFImplementation-Versionにタグ+ハッシュの情報を設定します。

def gitInfo = versionDetails()
version = gitInfo.lastTag.substring(1)
def implementationVersion = version + '.' + gitInfo.gitHash[0..7]

jar {
    manifest {
        attributes(
            'Implementation-Version' : implementationVersion
        )
    }
}

これで設定は完了です。

(おまけ) Implementation-Versionの情報をプログラムから取得する

META-INF/MANIFEST.MFImplementation-Versionですが、プログラムから取得することができます。

package com.github.onozaty.embed;

public class Main {

    public static void main(String[] args) {

        String implementationVersion = getImplementationVersion();
        System.out.println("implementationVersion: " + implementationVersion);
    }

    private static String getImplementationVersion() {
        return Main.class.getPackage().getImplementationVersion();
    }
}

アプリケーション起動時のログとして出しておくと、どのバージョンで実行された時のログなのかわかりやすくなると思います。

ちなみにSpring Bootだと、起動時にImplementation-Versionの情報を読み取って起動ログとして出力してくれます。

2022-01-07 00:10:11.145  INFO 11772 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication v1.0.0-beta1.86ea7f27 using Java 1.8.0_222 on PCXX with PID 11772 (F:\demo\demo-1.0.0-beta1.jar started by onozaty in F:\demo)

Discussion