たくさんの自由帳

MavenCentral にライブラリをアップロードしようとしたら 401

投稿日 : | 0 日前

文字数(だいたい) : 1556

どうもこんばんわ。

本題

GitHub Actionsを使ってボタンを押すだけでライブラリのリリース、今日も使おうと思ったら失敗してしまった。
その調査です。

Imgur

Imgur

Received status code 401 from server: Content access is protected by token

おことわり

この記事はOSSRHを使っているユーザー向けです。
いまライブラリを公開しようとすると、Central PortalというOSSRHの代替に誘導されるらしいです。

これらしい

めっちゃ最近で草
OSSRHのユーザー名、パスワードでアップロード出来なくなったらしい(?)。

https://central.sonatype.org/news/20240617_migration_of_accounts/

解決方法はユーザートークンなるものを使うらしい、これっぽい。

https://central.sonatype.org/publish/generate-token/

OSSRH にログイン

私はこっちですね: https://s01.oss.sonatype.org/

ログインしたら、名前のところのドロップダウンメニューを開いて、Profileを押します。

Imgur

そしたらドロップダウンメニューが出るので、User Tokenを選びます。

Imgur

そしたら、Access User Tokenボタンを押します。
ダイアログが出るのでログイン情報を再度入力します。

Imgur

Imgur

すると、2つの値が生成されます。
これを急いでコピーします。どうやら1分で勝手にウィンドウが消えるらしいです()。

左側がユーザーネームの代わりになるもの、右側がパスワードの代わりになるものです。
これをlocal.propertiesなり、GitHub Actionsの環境変数なりに入れれば良いわけですね。

local.propertiesの場合は、OSSRHのユーザー名、パスワードの値を変えれば良いはず。

# Sonatype OSSRH UserToken UserName
ossrhUsername={UserToken ユーザー名}
# Sonatype OSSRH UserToken Password
ossrhPassword={UserToken パスワード}

build.gradle.kts(ルートね、ライブラリの方のbuild.gradle.ktsじゃない)にベタ書きしてる場合は多分この辺。
以下のコードは公開にio.github.gradle-nexus.publish-pluginプラグインを使っている場合ですが、多分ユーザー名とパスワードをそれぞれユーザートークンで発行されたものに置き換えれば良いはずです。

// Sonatype OSSRH リポジトリ情報
nexusPublishing.repositories.sonatype {
    stagingProfileId.set(extra["sonatypeStagingProfileId"] as String)
    username.set(extra["ossrhUsername"] as String) // ←UserToken ユーザー名、私は環境変数から取ってるので extra から取り出している
    password.set(extra["ossrhPassword"] as String) // ←UserToken パスワード、私は環境変数から取ってるので extra から取り出している
    nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
    snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}

一応ローカルで試して、成功しました。
GitHub Actionsのシークレットの方も更新します。

Imgur

GitHub Actions

ユーザー名、パスワードが変わっただけなので、シークレットを更新して、GitHub Actionsを起動すれば良いはず。
環境変数から取ってる場合ymlは特に変えるところ無いはず。

きたきた
Imgur

以上です。お疲れさまでした