かまたま日記3

プログラミングメイン、たまに日常

gradle-git-release-pluginでGitHubにMaven成果物をリリースする

Mavenの成果物をアップして使えるようにする場合、MavenCentralやJCenterに上げるのが公式ですが、それらに上げられない*1specificなライブラリである、公式レポジトリに上げるのが面倒などの理由でもうちょっと簡単なソリューションが欲しい時があります。

そういう場合、GitHub(GitHub Pages)をMaven repositoryとして使うという方法があります。私も gradle-embulk-plugin など自分のライブラリを kamatama41/maven-repository というレポジトリで公開しており

buildscript {
    repositories {
        jcenter()
        maven { url "http://kamatama41.github.com/maven-repository/repository" }
    }
    dependencies {
        classpath("com.github.kamatama41:gradle-embulk-plugin:0.1.4")
    }
}

と言った記述でインストールすることが出来るようにしています。 このGitHubへのリリース作業を過略化するためのGradle pluginを作りました。

github.com

どんなプラグインかというと、maven-publish plugingradle-release plugingradle-git-publish pluginを統合したものになります。 release タスクを実行すると、以下のことを実施してくれます。

  • 指定したローカルディレクト*2にartifactをbuildしpublish
  • releaseを実行(Mavenのrelease pluginほぼ同じ挙動、詳細はこちらを参照)
  • release終了後、artifactを指定したGitリポジトリにpush

使用例

build.gradle

gitRelease {
    groupId = "com.example"
    artifactId = "awesome-artifact"
    repoUri = "git@github.com:your_account/your_maven_repository.git"
}

gradle.properties

version=0.1.0-SNAPSHOT

これで、masterブランチ上*3で、gradle releaseタスクを実行すると、以下のアクションが行われます。

  • gradle.properties が更新されて、バージョンが0.1.0になる。
  • github.com/your_account/your_maven_repositorygh-pages ブランチに新しいバージョン awesome-artifact-0.1.0.jar *4がcommitされpushされる
  • レポジトリに 0.1.0 のタグが追加される
  • すべて終了後、 gradle.properties が更新されて、バージョンが0.1.1-SNAPSHOTになる。

結構便利なので、ぜひ使ってみて下さい!

*1:or 上げるまでもない

*2:デフォルトだと${project_root}/build/git-release

*3:じゃないとエラーになる、リリースブランチは指定可能

*4:とその他に生成されるxmlなど