グループIDがio.github.xxxのアーティファクトをMavenセントラルへ公開する with GitHub Actions
概要
MavenセントラルリポジトリーへグループIDがio.github.xxx
(xxx
にはユーザー名が入る)のアーティファクトを公開する手順と、GitHub Actionsでデプロイを自動化する手順をメモします。
前提
- GitHubへサインイン済みであること
- GitHubでリポジトリーを作成済みであること
- GitリポジトリーへMavenでビルドできるJavaコードをコミット済みであること
central.sonatype.comで実施すること
サインイン
https://central.sonatype.com/ の右上にある「Sign In」と書かれたリンクを辿り、「Continue with GitHub」を選択してサインインします。
Namespaceの確認
https://central.sonatype.com/publishing/namespaces を開いてio.github.xxx
がVerifiedになっていることを確認します。
ユーザートークンを生成する
https://central.sonatype.com/account を開いて「Generate User Token」を押し、ユーザートークンを生成します。
ユーザートークンは後で使用するのでメモしておいてください。
GPGで鍵ペアを生成してサーバーへ登録する
https://central.sonatype.org/publish/requirements/gpg/#distributing-your-public-key の「Generating a Key Pair」と「Distributing Your Public Key」を参照してください。
pom.xmlを編集する
必要な要素を設定する
次の要素を設定します。
name
description
url
licenses
developers
scm
ソースとJavadocの添付設定を行う
https://central.sonatype.org/publish/publish-maven/#javadoc-and-sources-attachments を参考に設定します。
ただ、ガイドに記載されているプラグインのバージョンは古かったので、そこだけ新しいバージョンを指定する方が良さそうです。
- https://maven.apache.org/plugins/maven-source-plugin/
- https://maven.apache.org/plugins/maven-javadoc-plugin/
maven-gpg-pluginを設定する
https://central.sonatype.org/publish/publish-maven/#gpg-signed-components を参考に設定します。
こちらも新しいバージョンを指定しましょう。
central-publishing-maven-pluginを設定する
https://central.sonatype.org/publish-ea/publish-ea-guide/#publishing-by-using-the-maven-plugin を参考に設定します。
pom.xmlの例
GitHubで実施すること
https://github.com/<username>/<repository>/settings/secrets/actions
を開いて次のシークレットをRepository secretsへ登録します。
名前 | 値の取得元 |
---|---|
CENTRAL_USERNAME |
central.sonatype.comで生成したユーザートークンに含まれるUsername |
CENTRAL_PASSWORD |
central.sonatype.comで生成したユーザートークンに含まれるPassword |
GPG_PRIVATE_KEY |
GPGで生成した秘密鍵。エクスポート方法は後述 |
GPG_PASSPHRASE |
GPGで鍵ペアを生成する際に設定したパスフレーズ |
GPGで生成した秘密鍵をエクスポートするには次のコマンドを使用します。
gpg --export-secret-keys --armor <鍵のID>
GitHub ActionsのYAMLを作成する
デプロイ先サーバーとGPGを設定する
Setup Javaアクションには指定した内容をもとにオンザフライでsettings.xml
を作成する機能と、GPG秘密鍵を設定する機能があります。
https://github.com/actions/setup-java/blob/v4/docs/advanced-usage.md#Publishing-using-Apache-Maven を参考にデプロイ先サーバーとGPG秘密鍵およびパスフレーズを設定します。
その際、server-id
はcentral
とし、その他の値はGitHubで登録したシークレットの名前を参考に設定してください。
YAMLの例
デプロイ〜公開
GitHub Actionsでワークフローを動かしてデプロイします。
デプロイが上手くいくと https://central.sonatype.com/publishing/deployments で次のようにVALIDATED
の状態になります。
あとは「Publish」を押せばMavenセントラルリポジトリーへ同期され、アーティファクトが公開されます。
Discussion