手動で MavenCentral(Sonatype) にアップロードする方法
今回は、Gradle 経由で POM や JAR をアップロード出来ない方向けの解説を行います。
前提
あくまでもアーティファクトのアップロード手順の解説ですので、ビルドに失敗する人や、署名に失敗する人向けの記事では無い事に予めご理解ください。
また、Sonatype のアカウントは既に保持し、ネームスペースも既に所有している提で進めます。
なぜ失敗する?
おおよその場合、
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
には行いません。
作成方法については、普通に md5sum
や sha1sum
、Get-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
となるはずです。
サンプル
Discussion