S-JIS[2023-06-18/2025-07-03] 変更履歴

Sonatype

ソフトウェアのMavenセントラルリポジトリーへの公開方法のメモ(旧)。


概要

※このページに書かれているOSSRHを使う方法は、2025年6月に廃止になった。以降はMaven Central Portalを使用して登録する。[2025-07-03]

Sonatypeは、Maven Central Repositoryの管理と運営を行っている会社。

Mavenセントラルリポジトリーでソフトウェアを公開したい場合、Sonatypeに依頼する形となる。
依頼と言っても、ほとんど自動的に進むようだ。


Mavenセントラルリポジトリーへの公開手順

Mavenセントラルリポジトリーに自分のソフトウェアを公開する手順。[2023-06-22]

  1. MavenのgroupIdをSonatypeに新規登録する。
    1. groupIdを登録するにはSonatypeのアカウントが必要になるので、System Dashboard - Sonatype JIRAから「Sign up」で作成する。
  2. 自分のソフトウェアをSonatypeのステージング環境にpublishする。
    1. publishするにはGradleのmaven-publishプラグインを使用する。
    2. また、電子署名が必要となるのでGradleのsigningプラグインを使用する。
      1. 電子署名をする為にGnuPGをインストールして鍵を作り、鍵サーバーに登録しておく必要がある。
  3. Sonatypeのステージング環境からMavenセントラルリポジトリーへリリースする。

Group Idの新規登録

MavenのgroupIdを新規に登録するには、Sonatype JIRAのissueを新しく作る。

  1. System Dashboard - Sonatype JIRAにログインする。
    1. アカウントが無い場合は「Sign up」から作成する。これはメールアドレスだけあれば簡単に作れる。自分の場合、ログイン後に設定で「日本語」に変更した。
  2. Sonatype JIRAのダッシュボードの上部にあるメニューバーから「作成」をクリックする。
  3. プロジェクトに「Community Support - Open Source Project Repository Hosting」、課題タイプに「New Project」を選択する。
    他の選択肢を選んで「If you wish to publish your components to Maven Central, please create a New Project issue」と表示された場合、「New Project issue」のリンクをクリックすればよい。
  4. 項目を入力してissueを登録する。
  5. たぶんURLにGitHubを指定した場合、そのアカウントが当人のものかどうかの確認が入る。
    1. issueに「Create a temporary, public repository called https://github.com/アカウント名/OSSRH-XXXXX to verify github account ownership.」が表示されていたら、GitHubで公開リポジトリー「OSSRH-XXXXX」を作成する。
    2. issueのステータスをOpenに変える。
      1. プルダウンの「Waiting for Response」を「オープン」に変更する。
  6. しばらく待つ。(一応、2営業日ということになっているようだ)
  7. これにより、publishできるようになる。

issueに登録する項目は、hishidama Embulk pluginsの場合は以下のように入力した。

項目 例 備考
要約 hishidama Embulk plugins タイトル
説明 The Embulk plugins created by hishidama. description
添付ファイル   (無し)
Group Id io.github.hishidama.embulk MavenのgroupId
Project URL https://github.com/hishidama/embulk-plugins  
SCM url https://github.com/hishidama/embulk-plugins.git GitHubのclone url
Username(s)   (無し)
Already Synced to Central No  

初回のリリースが出来たことを確認したら、pushできた旨のコメントをissueに入れる。[2023-06-22]
これにより、issueがクローズされる。


アクセストークンの作成方法

Mavenセントラルリポジトリーにソフトウェアを公開(publish)するために、(パスワードの代わりに)アクセストークンが必要となる。[2024-07-11]

アクセストークンは以下の手順で作成する。

  1. Sonatypeのリポジトリーマネージャー(nexus repository manager)にログインする。(アカウントはSonatype JIRAのものと同じ)
  2. 右上のユーザーIDの欄をクリックし、出てくるメニューからProfileをクリックする。
  3. Profileタブの「Summary」と出ているプルダウンメニューから、「User Token」を選択する。
  4. 「Access User Token」ボタンを押す。
  5. 「ID : トークン」形式で文字列が表示されるので、username・passwordにこれを使用する。
    (Gradleのmaven-publishプラグインに指定する。→gradle.propertiesに記述する例)

ソフトウェアの公開方法

MavenのgroupIdの新設が承認されたら、ソフトウェアを公開できるようになる。[2023-06-22]

  1. Gradleのpublishコマンド(maven-publishプラグイン)を実行して、Sonatypeのステージング環境にソフトウェアをアップロードする。
    $ ./gradlew publish
  2. Sonatypeのリポジトリーマネージャー(nexus repository manager)にログインする。(アカウントはSonatype JIRAのものと同じ)
  3. 左側のメニューの「Build Promotion」の中の「Staging Repositories」をクリックする。( 一覧が表示されるのが微妙に遅いので、数秒待つ必要があるかも)
  4. 自分がpublishしたものを選択し、上部の「Close」を押す。(押してから数秒待つ)
  5. エラーが無ければStatus欄がclosedになり上部の「Release」が押せるようになるので、publishしたものを選択して「Release」を押す。(「Release」が無効なままだったら、 ブラウザーの画面リフレッシュをしてみる)
  6. 数時間待つと、Mavenセントラルリポジトリーで自分のソフトウェアが公開される。

Forbidden

publishしようとしたら、Forbiddenのエラーが出た。[2024-01-30]

$ ./gradlew publish
〜
* What went wrong:
Execution failed for task ':publishMavenJavaPublicationToMavenRepository'.
> Failed to publish publication 'mavenJava' to repository 'maven'
   > Could not PUT 'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/hishidama/embulk/embulk-output-tsurugidb/0.1.4/embulk-output-tsurugidb-0.1.4.jar'. Received status code 403 from server: Forbidden
〜
BUILD FAILED in 33s

確認の為にブラウザーからhttps://s01.oss.sonatype.org/#welcomeに ログインしようとしたら、以下のようなエラーダイアログが表示された。

Incorrect username, password or no permission to use the Nexus User Interface.
Try again.Forbidden

よく分からないのでJIRAで状況を説明したら、ログインできるようにしてもらえた。


Content access is protected by token

publishしようとしたら、Content access is protected by tokenのエラーが出た。[2024-07-11]

$ ./gradlew publish
〜
Execution failed for task ':publishMavenJavaPublicationToMavenRepository'.
> Failed to publish publication 'mavenJava' to repository 'maven'
   > Could not PUT 'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/hishidama/embulk/embulk-output-tsurugidb/0.1.6/embulk-output-tsurugidb-0.1.6.jar'. Received status code 401 from server: Content access is protected by token
〜
BUILD FAILED in 4s

今まではユーザーIDとパスワードで認証していたのが、アクセストークンを使う方式に代わったらしい。

→アクセストークンの作成方法


Maven目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま