やりたいこと
- gitのtagとコミットハッシュからバージョン番号を生成
- tagの中からバージョンを示すtagだけを絞り込む
- 自動生成したバージョン番号をJavaのコードから使用する
参考にしたサイト
Gradle でバージョン番号を自動的に付ける 〜 git-describe とのコラボ
grgit-gradle
BuildConfig Gradle-plugin for Java and Groovy projects
実装
- grgitでバージョン番号取得
- v[数字]で始まるタグをバージョンを示すタグとして、それ以外のタグを無視します
- BuildConfigでバージョン番号を含むクラスを自動生成してjavaコードから使用
- android pluginにはBuildConfigが含まれているみたいですが、今回はBuildConfigプラグインを使います
build.gradle
plugins {
id 'idea'
id 'application'
id 'org.ajoberstar.grgit' version '3.1.1'
id 'de.fuerstenau.buildconfig' version '1.1.8'
}
group 'com.example'
version = {
def tags = grgit.tag.list().collect { it.getName() }
def versionStr
if (tags.any { it ==~ /v\d.*/ }) {
versionStr = grgit.describe(longDescr: false, tags: true, match: ["v[0-9]*"])
} else {
versionStr = grgit.head().abbreviatedId
}
return versionStr + (grgit.status().isClean() ? "" : "+dirty")
}()
repositories {
mavenCentral()
}
task showVersion {
doLast {
println version
}
}
mainClassName = 'Main'
Main.java
import com.example.BuildConfig;
public class Main {
public static void main(String... args) {
System.out.println(BuildConfig.VERSION);
}
}
実行例
バージョンを示すタグがない場合
2f9b747 // コミットハッシュ
HEADにバージョンを示すタグがある場合
v0.1
バージョンを示すタグから追加でコミットした場合
v0.0-10-g3636be7
コミットされていない変更がある場合
v0.0-10-g3636be7+dirty