🐘
Gitのタグやハッシュの情報をバージョン情報として埋め込む(Gradle)
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.MF
のImplementation-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.MF
のImplementation-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.MF
のImplementation-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