GeekFactory

int128.hatenablog.com

GradleでBintrayを経由してMaven Centralに成果物を公開する

Maven Centralに成果物を公開するには、OSS Sonatype Nexusに成果物をアップロードする方法が広く知られていますが、Bintrayを経由してリリースする方法もあります。この方法には以下のメリットとデメリットがあります。

  • メリット
    • Bintrayには成果物に署名を付与する機能があるため、ビルドツールで複雑な設定をする必要がありません。
    • Bintrayはワンクリックで成果物をリリースできます*1
    • Bintrayの方が使いやすい(かも?)
  • デメリット
    • Bintrayに鍵ペアを預ける必要があります。これが気持ち悪い人にはおすすめできません。
    • BintrayでOSS Sonatype Nexusのパスワードを入力する必要があります。これが気持ち悪い人にはおすすめできません。

本稿では、GradleからBintrayに成果物をリリースし、さらにMaven Centralにリリースする方法を説明します。ビルドスクリプトの入ったサンプルプロジェクトを用意したので自由に使ってください。使い方は後で説明します。

手順の概要

前準備

  1. Sonatype OSSRHにプロジェクトを申請する。
  2. Bintrayを設定する。
  3. ビルドスクリプトを書く。

毎回のリリース

  1. GradleからBintrayに成果物をアップロードする。
  2. BintrayにアクセスしてPublishをクリックする。
  3. BintrayでSync to Maven Centralを実行する。

前準備

1. Sonatype OSSRHへの申請

まず、Maven Centralに登録するための申請が必要です。

  1. Sonatype OSSRHにプロジェクトを申請します。
    • JIRAのアカウントを作成してチケットを申請します。
    • 適当な英語でもちゃんと対応してくれます。参考までに、私がGradle SSH Pluginを申請した時のチケットはこちらです。
    • 詳細はOSSRH Guideを参照してください。
  2. 鍵ペアを鍵サーバに登録します。
    • GnuPGというツールを使います。HomeBrewでは brew install gnupg でインストールできます。
    • 手順をまとめると
      • gpg --gen-key で鍵ペアを生成する。
      • gpg --keyserver hkp://pool.sks-keyservers.net --send-keys で鍵サーバに登録する。
    • 詳細は Working with PGP Signatures を参照してください。

2. Bintrayの設定

Bintrayに鍵ペアを登録します。

  1. アカウントの設定で鍵ペアを登録します。
    • 公開鍵は gpg --export -a で表示できます。
    • 秘密鍵gpg --export-secret-key -a で表示できます。
  2. リポジトリの設定で Sign this repository's files with key from: user にチェックを入れます。これにより、Bintrayに成果物をアップロードすると自動的に署名が付与されるようになります。

Bintrayで新しいパッケージを作成します。デフォルトではmavenというリポジトリが用意されているので、Add New Packageをクリックしてパッケージを作成します。パッケージの名前は公開しようとしている成果物の名前にしておきます。

3. ビルドスクリプトの作成

以降はビルドスクリプトの入ったサンプルプロジェクトを使う前提で説明します。成果物に合わせて以下を修正してください。

  • build.gradleのdependenciesを依存関係に合わせて直す。
  • gradle.propertiesに書いてあるパッケージ名などを直す。

また、ホームディレクトリの~/.gradle/gradle.propertiesにBintrayのAPIキーを書いておきます。

bintrayUser=example
bintrayKey=secret

毎回のリリース手順

ここからは毎回のリリースで実施する手順です。

1. GradleからBintrayに成果物をアップロード

まず、Bintrayに成果物をアップロードします。この時、versionプロパティでバージョンを渡します。

./gradlew -Pversion=0.1.2 bintrayUpload

BUILD SUCCESSFULと表示されれば成功です。

2. BintrayにアクセスしてPublishをクリック

Bintrayにアクセスすると以下のメッセージが表示されます。

Notice: you have 8 unpublished items for this package (expiring in 23 hours) Discard | Publish

PublishをクリックするとBintrayで公開されます。

3. BintrayでSync to Maven Centralを実行

Bintrayのパッケージ画面にMaven Centralというタブがあるので、これをクリックします。するとSonatype Nexusのログイン情報を入力する画面が表示されるので、IDとパスワードを入力します。Syncをクリックすればバックグラウンドで同期が始まります。

なお、Maven Centralに公開するにはまずJCenterに公開する必要があるので、初回のみJCenterの申請が必要です。初回はその旨のメッセージ表示されます。本当は前準備でやることですが、説明の都合上ここに書いておきます。

まとめ

Maven Centralへの公開は簡単なので、みんな自作ライブラリをMaven Centralに公開しましょう。

*1:もちろんWeb上でリリース対象を確認するステップを省略することも可能ですが、人間がコマンドを実行する場合はミスに気づく目的で省略しない方が安全だと思います。確認を省略する場合はTravis CIからNexus/Bintrayに直接リリースするように自動化した方がよいでしょう。