Kotlin 製ライブラリを Maven Central に Release する

先日 Kotlin 製のライブラリを実装しました。せっかくなので Maven Central に Release しようと思ったのですが、手順が多く詰まることが多かったので、リリースができるまでを紹介します。

Agenda

ステップが長いので Agenda を載せておきます。

  • JIRA のアカウントを作成しチケットを起票
  • メタデータを pom.xml に追加
  • Deploy に必要なプラグインを追加
  • Javadoc の変わりに Dokka を利用
  • パッケージの署名
  • Deploy ユーザー情報の設定
  • Deploy

JIRA のアカウントを作成しチケットを起票

こちらは初回リリースの方のみ必要となります。ここでは登録するドメイン (groupId) の重複を確認しているようです(間違っていたら教えてください)。

以下のリンクから Sign up を行って下さい。

アカウントを作成できたらチケットを起票します。この時点で Github にプロジェクトを push しておいて下さい。

チケット起票

実際に自分が起票したチケットを参考に起票して下さい。ここで入力する 「GroupId」 がチェックされています。「Already Synced to Central」は NO を選択します。

承認されるとコメントがあるので待ちましょう。

メタデータを pom.xml に追加

ドメインの審査が完了したら pom.xml を更新していきます。

「groupId」は JIRA で承認された groupId を利用するようにして下さい。それ以外も次の項目は必須なので記入しましょう。

License・Developer・scm (Source Code Management)を記述していきます。Github を利用している場合は次の通りです。

Deploy 先の情報を distributionManagement に記述します。

Deploy に必要なプラグインを追加

Deploy のためのプラグインを追加していきます。ドキュメントが揃っているので以下とほとんど変わりません。

必要なプラグイン

  • nexus-staging-maven-plugin
  • maven-source-plugin
  • maven-gpg-plugin

ドキュメントでは記述されている maven-javadoc-plugin は利用しません。これの変わりに dokka-maven-plugin と maven-assembly-plugins を利用します。

Javadoc の代わりに Dokka を利用

パッケージは Deploy 時に Staging にアップロード後、 Validation され Release となります。その Validation で Javadocs.jar をチェックされるのですが、Kotlin では javadocs.jar を生成しません。

ここで結構ハマりました。調べてみると Fake Javadoc を用意することで対応できるようです。

Fake Javadocs の生成

Fake Javadocs を作るためにプラグインを利用します。利用するプラグインは 以下の 2 つです。

  • dokka-maven-plugin
  • maven-assembly-plugins

dokka-maven-plugin は Kotlin 版の Documentation Engine です。maven-assembly-plugins は javadocs.jar 生成に利用します。

dokka-maven-plugin は JCenter Repository にあるため、プラグインリポジトリのリストに JCenter を追加して下さい。

dokka-maven-plugin と maven-assembly-plugins を追加します。

28 行目で指定している dokka.xmlsrc/assembly に作ります。

Deploy に必要なプラグインの設定が一通り完了したので全体を見てみます。が、長くなるのでこちらをご参照下さい。

パッケージの署名

Deploy にはパッケージに署名する必要があります。GPG で key pair を作成します。

❯ gpg --gen-key

生成時には Key の長さ・名前・メールアドレス・パスワードを聞かれるのでそれぞれ入力しましょう。

最後に鍵ID を Key Server に送信します。

❯ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 鍵ID

Deploy ユーザー情報の設定

ここでは Deploy 時のユーザーを設定します。~/.m2/settings.xml に Sonatype JIRA のアカウント情報と、署名情報を記述します。

Deploy

ようやく準備が整いました。Deploy は、プラグインが認証・jar の push・署名を一通り行ってくれるため次のコマンドだけで完了します。

❯ mvn -DperformRelease=true clean deploy

「Remote staging repositories released.」となり「Build Success」すれば完了です。staging repositories に release され定期バッチで Maven Central に反映されます。

Staging に上がった jar は Nexus Repository Manager から確認できます。

リリースが完了したら、初回の人は JIRA に完了したことをコメントしましょう。

まとめ

他の Package Manager でリリースしたことは何度かありますが、Maven Central へのリリースがここまで大変だとは思いませんでした。

次回はそんな面倒なリリース作業を Travis CI にまかせて自動リリースする方法を紹介したいと思います。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.