Android のライブラリプロジェクトを爆速で Maven Central にデプロイする

5 つのステップを踏んで、Maven Central にライブラリをデプロイします。

# 1. Sonatype の JIRA にサインアップする

[Sonatype の JIRA](https://issues.sonatype.org/secure/Dashboard.jspa) にアカウントを登録します。
アカウントの ID と Pass は今後も使うので忘れないようにして下さい。

# 2. Sonatype の JIRA に、デプロイ設定の依頼を投げる

Sonatype の JIRA の Community Support にチケットを投げます。

[参考例](https://issues.sonatype.org/browse/OSSRH-8601)

必須なのは、GroupId、Project URL、SCM url、UserName。

GroupId は Maven の GroupId です。自分が持つプロジェクトのドメインをいい感じにまとめる id を付けましょう。
Project URL は、コードやイシュー管理が行われている場所だったり、ランディングページ的な場所を指定しましょう。
SCM url は http://oss.sonatype.org。
UserName はデプロイする人の、Sonatype JIRA アカウント名を入れます。

チケットを投げると、2 ~ 3 日で返事が返ってきます。
最初のリリース版をデプロイしたら教えてねって書いてあるので、デプロイしたらコメントしましょう。

# 3. Maven にデプロイする準備をする

[Gradle のプラグイン](https://github.com/chrisbanes/gradle-mvn-push) を使って準備をします。

まず、`~/.gradle/gradle.properties`を準備します。無ければ作って下さい。

このファイルの中身に、以下の行を追記します。

```
NEXUS_USERNAME=hogehoge
NEXUS_PASSWORD=oogggsss

signing.keyId=AABBCCDD
signing.password=safsfs
signing.secretKeyRingFile=~/.gnupg/secring.gpg
```

NEXUS_USERNAME は Sonatype JIRA のアカウント名、NEXUS_PASSWORD は Sonatype JIRA のアカウントのパスワードです。

また、ライブラリのリリース版をデプロイする際には、PGP 署名が必要です。
signing.* はその署名ファイルの情報となります。
署名ファイルがない場合は`gpg`コマンドで作って下さい。プロンプトで色々聞かれますが、好きなモノを設定して下さい。

signing.keyId は、`gpg --list-secret-keys` したときの、`sec   2048R/AABBCCDD 2014-04-09`の`2048R`の後ろに付いている 8 桁の 16進数です。
signing.password は、署名のパスフレーズです。
signing.secretKeyRingFile は署名ファイルのパスを指定します。

その後、署名を管理するサーバに公開鍵をアップロードします。

`gpg --keyserver hkp://pool.sks-keyservers.net --send-keys AABBCCDD`

次に、プロジェクトの root にある`gradle.properties`を編集します。
追記するのは以下の内容です。

```
VERSION_NAME=1.0.0
VERSION_CODE=1
GROUP=jp.yokomark

POM_DESCRIPTION=Library description
POM_URL=https://github.com/KeithYokoma/CompoundContainers
POM_SCM_URL=https://github.com/KeithYokoma/CompoundContainers
POM_SCM_CONNECTION=scm:git@github.com:KeithYokoma/CompoundContainers.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:KeithYokoma/CompoundContainers.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=Hogehoge
POM_DEVELOPER_NAME=Hogehoge
```

バージョン番号だったり、グループIDだったり、ひと通り任意の内容を入れていきます。

次に、モジュールにも`gradle.properties`を用意します。無ければ作って下さい。
内容は以下のとおりです。

```
POM_NAME=My Library Name
POM_ARTIFACT_ID=MyLibrary
POM_PACKAGING=aar
```

PACKAGING を aar にすることで、Android の各種のライブラリ成果物を aar としてアップロードできるようになります。

最後に、ビルドスクリプトを修正します。
ライブラリモジュールの`build.gradle`に以下の行を追記します。

```
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
```

これで準備完了です。

# 4. デプロイする

`./gradlew clean build uploadArchives`

# 5. リリース作業をする

デプロイはステージングサーバに実行されます。このままだとリリースにはなりません。

https://oss.sonatype.org/

ここに、Sonatype JIRA のアカウントでログインし、ステージングにある自分のリポジトリをリリースする作業をします。

左メニューの Build Promotion から Staging Repositories を選択し、自分のリポジトリを一覧から選択します。
下半分に表示されるタブから、リポジトリの中身を確認し、問題なければ、上半分のタブの下にある Close ボタンを押します。
しばらくするとバリデーションが走り、問題なければ Close が終わります。
Close が終わったら、Refresh ボタンで一覧を更新し、再度自分のリポジトリを選択して、Release ボタンを押します。

これでリリース作業が終了となります。

# appendix. デプロイに失敗したら

Javadoc がどうの、とかで失敗した場合は、以下のスクリプトをモジュールの`build.gradle`に追記する。

```groovy
afterEvaluate {
    javadocs.classpath += files(android.plugin.runtimeJarList)
}
```