GitHub を Maven 公開リポジトリにする (Gradle 編)

最近は Gradle がとってもお気に入りなので プラグインの開発も少しずつ行っているのですが、 折角作成したプラグインやライブラリも Maven リポジトリで公開しないと利用しづらいので どこか公開できる場所がないか探していたところ

Github を Maven 公開リポジトリにする
という記事を見つけたので ソース管理と合わせて GitHubMaven リポジトリを作成することにしました。
ただ無料版だと300MB しか利用できないので容量がちょっと心配だったのですが id:kimukou_26 さんのアドバイスによりあまり容量を気にする必要はないことがわかったので GitHub にしました。
それによく考えてみれば そもそも 300MB もコードが書けるほど時間に余裕はないですし...

上記の記事では Maven が使われていましたが、今回は Gradle を利用することもあり このブログにも その手順をまとめておくことにしました。
また、上記の記事のコメントにもあるように master ブランチより gh-pages プランチの方が いい感じの URL になるので gh-pages にしました。

1. GitHub に公開リポジトリを作成する

まずは GitHubリポジトリを作成します。
リポジトリ名は何でもよいですが 今回は maven としました。
次にローカルリポジトリを作成して gh-pages ブランチに push します。
くれぐれも master ブランチに push しないように...
gh-pages ブランチは プロジェクトページを作成するためのブランチらしく

http://bluepapa32.github.io/maven/
のようなURLで公開できるようになるようです。(詳細は こちら)

$ mkdir maven
$ cd maven
$ git init
$ echo "Welcom to bluepapa32's Maven repository" > index.html
$ git add index.html
$ git commit -m "First pages commit"
$ git remote add origin git@github.com:bluepapa32/maven.git
$ git push -u origin master:gh-pages

以下の URL にアクセスしてみましょう。ちょっと寂しいページですがちゃんと表示されます。

http://bluepapa32.github.io/maven/

2. ローカルリポジトリにライブラリをコピーする

公開したいプロジェクト (今回は 以前このブログでも紹介した Native2Ascii プラグイン) の build.gradle に

apply plugin: 'maven'

// maven ローカルリポジトリのパス
ext {
    mavenRepository = '/path/to/maven'
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri(mavenRepository))
        }
    }
}
を追加し
$ cd /path/to/gradle-native2ascii-plugin
$ gradle uploadArchives
のように実行すると /path/to/maven の下にライブラリがコピーされます。

3. GitHub に push して最新版を公開する

ローカルリポジトリにコピーされたライブラリを git add/commit/push して GitHubmaven リポジトリに公開します。

$ cd /path/to/maven
$ git add .
$ git commit -m 'gradle-native2ascii-plugin 0.1.0 release'
$ git push

4. 公開したライブラリ (プラグイン) を利用する

公開したライブラリ (今回はプラグイン) を利用したいプロジェクトの build.gradle に

buildscript {
    repositories {
        maven { url 'http://bluepapa32.github.io/maven/' }
    }
    dependencies {
        classpath 'com.bluepapa32.gradle.plugins:gradle-native2ascii-plugin:0.1.0'
    }
}

apply plugin: 'native2ascii'
のように追加するだけです。通常のライブラリであれば
repositories {
    maven { url 'http://bluepapa32.github.io/maven/' }
}
dependencies {
    compile 'com.bluepapa32:hoge:0.1.0'
}
のように追加すればよいです。

今回は 3. を手作業で行いましたが、リリースの度にコマンドをイチイチたたくのはちょっと面倒です。(そんな大した話ではないですが...)
と言うことで、現在 Gradle から 直接 GitHub に push しちゃおうなんて無謀なことを考えています。
最終的には プラグイン化して uploadArchives タスクで GitHub に push できるようになるといいな...