Central Repo への公開
レシピセクションは目的に焦点を当て、説明は最小限に留める。
Central Portal への公開の一般的な概念については、Sonatype の Publish guides も参照。
目的
プロジェクトを Central Repository に公開したい。
手順
事前準備 1: Central Portal の登録
Sonatype の Publish guides に従って Central Portal アカウントを作成する。
- OSSRH アカウントを持っていた場合は、Forgot password フローで新しい Central Portal に移行できる。これにより以前のネームスペース関連を維持できる。
- GitHub で認証する場合、
io.github.<user_name>が自動的にアカウントに紐づく。
register a namespace ガイドの手順に従い、ドメイン名をアカウントに紐づける。
事前準備 2: PGP 鍵ペア
Sonatype の GPG guide に従って PGP 鍵ペアを生成する。
GnuPG をインストールし、バージョンを確認する:
$ gpg --version
gpg (GnuPG/MacGPG2) 2.2.8
libgcrypt 1.8.3
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
次に鍵を生成する:
$ gpg --gen-key
鍵を一覧表示する:
$ gpg --list-keys
/home/foo/.gnupg/pubring.gpg
------------------------------
pub rsa4096 2018-08-22 [SC]
1234517530FB96F147C6A146A326F592D39AAAAA
uid [ultimate] your name <[email protected]>
sub rsa4096 2018-08-22 [E]
鍵を配布する:
$ gpg --keyserver keyserver.ubuntu.com --send-keys 1234517530FB96F147C6A146A326F592D39AAAAA
手順 1: sbt-pgp
sbt-pgp プラグイン は公開アーティファクトを GPG/PGP で署名できる。(オプションで sbt-ci-release により公開プロセスを自動化できる。)
ビルドで有効にするため、project/plugins.sbt に次の行を追加する:
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.3.1")
手順 2: 認証情報
認証情報として使うユーザートークンをポータルで生成する。トークンは安全な場所(リポジトリ内ではない)に保存すること。
sbt 2.x は環境変数 SONATYPE_USERNAME と SONATYPE_PASSWORD からも読み取り、central.sonatype.com 用の認証情報をそのまま追加できる。GitHub Actions など CI 環境からの自動公開に便利である。
- run: sbt ci-release
env:
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
PGP_SECRET: ${{ secrets.PGP_SECRET }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
ローカルマシンでは、$HOME/.sbt/2/credentials.sbt ファイルに次の内容を記述するのが一般的である:
credentials += Credentials(Path.userHome / ".sbt" / "sonatype_central_credentials")
次に $HOME/.sbt/sonatype_central_credentials ファイルを作成する:
host=central.sonatype.com
user=<your username>
password=<your password>
手順 3: build.sbt の設定
Maven リポジトリに公開するには、正しいメタデータが生成されるよういくつかのセッティングを設定する必要がある。
注意: Central Portal に公開するには、publishTo を localStaging リポジトリに設定する必要がある:
// new setting for the Central Portal
publishTo := {
val centralSnapshots = "https://central.sonatype.com/repository/maven-snapshots/"
if version.value.endsWith("-SNAPSHOT") then Some("central-snapshots" at centralSnapshots)
else localStaging.value
}
これらのセッティングを build.sbt の末尾または別の publish.sbt に追加する:
organization := "com.example.project2"
organizationName := "example"
organizationHomepage := Some(url("http://example.com/"))
scmInfo := Some(
ScmInfo(
url("https://github.com/your-account/your-project"),
"scm:[email protected]:your-account/your-project.git"
)
)
developers := List(
Developer(
id = "Your identifier",
name = "Your Name",
email = "your@email",
url = url("http://your.url")
)
)
description := "Some description about your project."
licenses := List(License.Apache2)
homepage := Some(url("https://github.com/example/project"))
// POM から Maven Central 以外の追加リポジトリをすべて削除する
pomIncludeRepository := { _ => false }
publishMavenStyle := true
// new setting for the Central Portal
publishTo := {
val centralSnapshots = "https://central.sonatype.com/repository/maven-snapshots/"
if version.value.endsWith("-SNAPSHOT") then Some("central-snapshots" at centralSnapshots)
else localStaging.value
}
pom.xml(Maven が使うプロジェクトコンフィギュレーションの最終成果物)の完全な形式は POM Reference に記載されている。build.sbt の pomExtra オプションでさらにデータを追加できる。
手順 4: アーティファクトのステージング
sbt シェルから実行する:
> publishSigned
手順 5: バンドルのアップロードまたはリリース
sbt シェルから実行する:
> sonaUpload
これでバンドルが Central Portal にアップロードされる。「Publish」ボタンをクリックして Central Repository に公開する。
公開を自動化する場合は、次を実行する:
> sonaRelease
公開したアーティファクトが Central Repository https://repo1.maven.org/maven2/ に表示されるまで、10 分から数時間かかることがある。