LoginSignup
3
5

More than 5 years have passed since last update.

Gradleでgitからバージョン番号を自動生成してJavaで使う

Posted at

やりたいこと

  • 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
3
5
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
3
5