GradleでBintrayにアップロードする手順

## Bintrayとは？
[Bintray](https://bintray.com)は[JFrog](http://www.jfrog.com)が提供しているソフトウェアの配布を行う為のサービスです。


## 概要
おおまかに以下のような構造で成り立っています。

* Repository
* Package
* Version
* File

それぞれのイメージは、以下のような感じです。

* Repository: 例えばMaven、rpm、debと言ったレポジトリ
* Package: 配布物。
* Version: 配布物の世代。
* File: 配布物のファイル。


## まず初めに

これからざっくりと説明しますが、詳細については[How Do I Upload My Stuff to Bintray?
](https://bintray.com/docs/usermanual/uploads/uploads_howdoiuploadmystufftobintray.html)を見てください。

Bintrayのアカウントを取得します。
メールアドレスで取得する方法の他に、GitHub、Twitter、Googleのアカウントでも取得できます。

Bintrayでは、GitHubとの連携がしやすいようになっているため、もしOSSで公開するのであればGitHubでレポジトリを作ったほうがいいと思います。


## Repositoryを用意する

サインインすると既に4つRepositoryが提供されています。
今回は、Mavenで利用できるようなプロダクトを、Gradleでアップロードするため、 **maven**を利用します。
Repositoryは、新たに追加出来るのでいろいろと分けて使えそうです。


## Packageを作る

次に **maven**を選択するとPackageのリストが表示されます。
**Add New Package**から新しいPackageを作ります。
**Name**以外の項目は、後で編集することも出来ます。
**Licenses**では、主要なOSSのライセンスを選べます。
**Make download numbers in stats public**を選ぶと、ダウンロードされた統計が見えるようになります。

先ほどGitHubとの連携がしやすいとありましたが、GitHubのレポジトリであれば、
**GitHub repo**、 **GitHub release notes file**の項目に設定できるようになります。
また、Packageの **Readme**、 **Release notes**にて設定されたものが表示されます。


## Versionを用意する

**New Version**から新しいVersionを作れます。
**Release date**は後から変えられないので、注意してください。

**Choose GitHub tag** にてGitHubのリリースタグを使用することが出来ます。

ここまで出来たらあとは、アップロードするだけです。
**Upload Files**からでもアップロード出来ます。


## gradle-bintray-pluginを利用する

[bintray/gradle-bintray-plugin](https://github.com/bintray/gradle-bintray-plugin)

2014-07-13時点での最新は0.5です。

**build.gradle**に追加するコードは、[Usage](https://github.com/bintray/gradle-bintray-plugin#usage)をご覧ください。

[Configuration](https://github.com/bintray/gradle-bintray-plugin#configuration)に、どのような設定をすれば良いのか書いてあります。

**bintray_user**、 **bintray_api_key**のような認証情報は *.gradle/gradle.properties*に書いておきましょう。
**bintray_api_key**はhttps://bintray.com/profile/edit の **API Key**にあります。
**PublicationName**は、[65.1. The “maven-publish” Plugin](http://www.gradle.org/docs/current/userguide/publishing_maven.html)の
*Example 65.2. Adding a MavenPublication for a java component*を用いて説明すると、

```Groovy

publications {
    mavenJava(MavenPublication) {
        from components.java
    }
}

```
*MavenPublication*の定義名である **mavenJava**のことです。 

詳細な **bintray**のプロパテイは[BintrayExtension.groovy](https://github.com/bintray/gradle-bintray-plugin/blob/master/src/main/groovy/com/jfrog/bintray/gradle/BintrayExtension.groovy)を参考にしてください。

## アップロードする

*gradle tasks*にて **bintrayUpload**が追加されているはずです。
*gradle publish*または、 *gradle build*で予め生成しておく必要があります。
*gradle bintrayUpload*を実行すれば、アップロードされます。

**-SNAPSHOT**が付いていると **BAD REQUEST**として扱われます。
アップロードに失敗してゴミファイルが残ってしまった場合でも24時間以内であれば、
Versionの画面上から **Discard**を選択することで破棄できます。
**Publish**を選択すると公開されます。


## ダウンロードする

**build.gradle**のに以下のように追加するとレポジトリとして使用できます。

```Groovy
repositories {
    // JCenterに登録した場合
    jcenter()

    maven {
        url "http://dl.bintray.com/$bintray_user/$Repository"
    }
}

```

*curl*でもダウンロード出来ます。

```Bash
curl -L -o <FILE.EXT> "http://dl.bintray.com/$bintray_user/$Repository/<FILE_TARGET_PATH>"
```


## おわりに

今回は、実験的にjarを作成したけど[sonatype](https://oss.sonatype.org/)に申請するのが面倒だったので、公開する方法は無いかと探していたところ、Bintrayがあったので助かりました。
容量も500MBなので使い方次第だと思います。
BintrayにはJCenterというMavenレポジトリがあるので、ゆくゆくはそちらへ登録されるように申請するということも出来るみたいです。

GitHubを使っていて、実験用レポジトリとして使いたい人がいらっしゃったら、是非[Bintray](https://bintray.com)を使ってみてはいかがでしょうか。

## JCenterへの登録

2014-07-13 追記

Bintrayに登録したMavenレポジトリのパッケージは、JCenterへ登録することが出来ます。

詳細は、[Including Your Packages in JCenter](https://bintray.com/docs/usermanual/uploads/uploads_includingyourpackagesinjcenter.html)をご覧ください。

ちなみに **sources.jar**が無いと **「To include your package in JCenter, kindly add a source jar to the release version files. We'll be glad to include your package then. 」**
と指摘されます。

最低限必要なファイルは、以下の通りです。

* pom.xml
* jar
* sources.jar
* javadoc.jar