🌠

手動で MavenCentral(Sonatype) にアップロードする方法

に公開

今回は、Gradle 経由で POM や JAR をアップロード出来ない方向けの解説を行います。

前提

あくまでもアーティファクトのアップロード手順の解説ですので、ビルドに失敗する人や、署名に失敗する人向けの記事では無い事に予めご理解ください。
また、Sonatype のアカウントは既に保持し、ネームスペースも既に所有している提で進めます。

なぜ失敗する?

おおよその場合、

Log
401 Content access is protected by token

このようにトークンではじかれると思います。
しかし、

def ossrhUsername = 'JGw/ZBTl'
def ossrhPassword = '7R9SMGUpQmgkSXdtAfomu6NjKptXfuAWjBEYu+c2jEeq'

トークンは設定していると思います。
何度設定しなおしても 401 エラーになる...

なので、Gradle でビルドしてそのまま MavenCentral に publish! ...というのが出来ません。
となると、トークンの問題は一旦放置して、手動でアップロードするしかありません。
では、パッケージを作成する方法を解説していきます。

パッケージを作成

とりあえず、GPG 鍵による署名付きで、publishToMavenLocal をします。
すると、[ホームディレクトリ]/.m2/repository/GROUP/ARTIFACT_ID/VERSION/にアーティファクトが配置されます。
ZIPする前にいくつか行うことがあります。

  • SHA1 ハッシュを作成
  • MD5 ハッシュを作成
  • メタデータを削除

まず、簡単にできるメタデータの削除から解説します。
このファイルは、ARTIFACT_ID/のディレクトリ直下にある maven-metadata-local.xml の事です。これを削除しましょう。
次に、ハッシュの作成についてですが、これは、*.asc には行いません。
作成方法については、普通に md5sumsha1sumGet-FileHash 等を用いれば大丈夫です。
重要なのは、両方必要なところです。
また、find コマンドでやった場合、*.md5.sha1*.sha1.md5 などが作成されないようにしましょう。
Linux でのコマンドの例を置きます

cd ~/.m2/repository/GROUP/ARTIFACT_ID/
rm -f maven-metadata-local.xml
cd VERSION/
find . -maxdepth 1 -not -name "*.asc" -not -name "*.md5" -not -name "*.sha1" -type f -exec sh -c 'md5sum "$1" | awk "{print \$1}" > "$1.md5"' _ {} \;
find . -maxdepth 1 -not -name "*.asc" -not -name "*.md5" -not -name "*.sha1" -type f -exec sh -c 'sha1sum "$1" | awk "{print \$1}" > "$1.sha1"' _ {} \;
cd ~/.m2/repository/
zip maven.zip -r GROUP(TLD)

これで、パッケージの作成は完了です。

アップロード

https://central.sonatype.com/publishing

こちらへアクセスします。
Publish Component を押し、適当に Deployment Name を設定後、Choose File で、先ほど作成した maven.zip(例) を選択します。
また Publish Component を押し、ステータスが Pending になるのを確認します。
少し待つと Validating になるはずです。
そのまま正常に進むと、Publish のボタンが出現し、押して数分待つと、Published となるはずです。

サンプル

https://github.com/s1204IT/BenesseExtension

Discussion