Sonatype へのデプロイは簡単です!次の簡単な手順に従ってください
Sonatype を構成および公開するためのリファレンスプロセスは、OSSRH ガイドに記載されています。簡単に言うと、公開されている URL が 2 つ必要です
OSSRH ガイドでは、Sonatype でアカウントを設定するのに必要なプロセスについて説明しています。Sonatype の JIRA アカウントを作成し、次に 新規プロジェクトチケットを作成するだけです。アカウントを作成するときは、プロジェクトがホストされているのと同じドメインをメールアドレスで使用するようにしてください。これにより、Sonatype がチケットで要求された groupId との関係を検証するのが簡単になりますが、所有権を確認するために使用される唯一の方法ではありません。
新規プロジェクトチケットの作成は、次のようになります。
JIRA で Sonatype アカウントを作成したら、同じ資格情報を使用して Nexus リポジトリマネージャーにログインできます。これはガイドでは必須ではありませんが、後で公開されたアーティファクトを確認するのに役立つ場合があります。
注意: Sonatype は、新規プロジェクトチケットへの返信には最大 2 営業日かかる場合があることを推奨していますが、私の場合には数分でした。
セントラルリポジトリへの公開に関する Sonatype の 要件に対応し、公開プロセスを簡素化するために、2 つのコミュニティプラグインを使用できます。sbt-pgp プラグインは、GPG/PGP でファイルに署名できます。(オプションで、sbt-sonatype は、Sonatype リポジトリへの公開をよりきれいにすることができます。)
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
使用する PGP キーを使用して、sbt-pgp プラグインを使用して Sonatype リポジトリに公開するアーティファクトに署名できます。プラグインの手順に従うと、すぐに PGP 署名されたアーティファクトが作成されます。
簡単に言えば、次の行を ~/.sbt/1.0/plugins/gpg.sbt
ファイルに追加して、SBT プロジェクトでグローバルに有効にします。
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2")
注意: このプラグインは、アーティファクトに署名するためのソリューションです。GPG コマンドラインツールで動作します。
gpg
コマンドが sbt で利用可能な PATH にあることを確認します。
Sonatype OSSRH アカウントの資格情報は、安全な場所 (例: リポジトリ内ではありません) に保存する必要があります。一般的な規則は、次の内容を含む $HOME/.sbt/1.0/sonatype.sbt
ファイルです。
credentials += Credentials(Path.userHome / ".sbt" / "sonatype_credentials")
次に、ファイル ~/.sbt/sonatype_credentials
を作成します。
realm=Sonatype Nexus Repository Manager
host=oss.sonatype.org
user=<your username>
password=<your password>
注意: Coursier が資格情報を使用するには、最初の 2 つの文字列が
"Sonatype Nexus Repository Manager"
と"oss.sonatype.org"
である必要があります。2021 年 2 月以降に作成された新しい OSSRH アカウントを使用している場合は、"oss.sonatype.org"
の代わりに"s01.oss.sonatype.org"
を使用してください。
maven リポジトリに公開するには、正しいメタデータが生成されるようにいくつかの設定を構成する必要があります。
これらの設定を build.sbt
の末尾または別の publish.sbt
に追加します。
ThisBuild / organization := "com.example.project2"
ThisBuild / organizationName := "example"
ThisBuild / organizationHomepage := Some(url("http://example.com/"))
ThisBuild / scmInfo := Some(
ScmInfo(
url("https://github.com/your-account/your-project"),
"scm:[email protected]:your-account/your-project.git"
)
)
ThisBuild / developers := List(
Developer(
id = "Your identifier",
name = "Your Name",
email = "your@email",
url = url("http://your.url")
)
)
ThisBuild / description := "Some description about your project."
ThisBuild / licenses := List(
"Apache 2" -> new URL("https://apache.dokyumento.jp/licenses/LICENSE-2.0.txt")
)
ThisBuild / homepage := Some(url("https://github.com/example/project"))
// Remove all additional repository other than Maven Central from POM
ThisBuild / pomIncludeRepository := { _ => false }
ThisBuild / publishTo := {
// For accounts created after Feb 2021:
// val nexus = "https://s01.oss.sonatype.org/"
val nexus = "https://oss.sonatype.org/"
if (isSnapshot.value) Some("snapshots" at nexus + "content/repositories/snapshots")
else Some("releases" at nexus + "service/local/staging/deploy/maven2")
}
ThisBuild / publishMavenStyle := true
pom.xml
(Maven が使用するプロジェクト構成の最終成果物) ファイルの完全な形式は、こちらに概要が記載されています。build.sbt
の pomExtra
オプションを使用して、さらにデータを追加できます。
sbt シェルから次を実行します。
> publishSigned
Nexus リポジトリマネージャー (Sonatype の Jira アカウントと同じログイン) で公開されたアーティファクトを確認します。
ステージングリポジトリを閉じ、「閉じる」ボタンを押してから「リリース」ボタンを押して、リリースをセントラルに昇格させます。
注意: sbt-sonatype はサードパーティ製プラグインであり、Lightbend サブスクリプションの対象ではありません。
Sonatype の Nexus の使用を簡素化するには、project/plugins.sbt
に次の行を追加して、sbt-sonatype プラグインをプロジェクトにインポートします。
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.13")
このプラグインは公開プロセスを容易にしますが、簡単に言えば、ライブラリをリポジトリに公開するための主な手順は次のとおりです。
sonatypeOpen "your groupId" "Some staging name"
publishSigned
sonatypeRelease
このプラグインを使用する際に注意すべき重要なキーを以下に示します。詳細については、こちらをお読みください。
// This becomes a simplified version of the above key.
publishTo := sonatypePublishToBundle.value
// Set this to the same value set as your credential files host.
sonatypeCredentialHost := "oss.sonatype.org"
// Set this to the repository to publish to using `s01.oss.sonatype.org`
// for accounts created after Feb. 2021.
sonatypeRepository := "https://oss.sonatype.org/service/local"
公開後、Nexus のリリースワークフローに従う必要があります。
注意: sbt-sonatype プラグインは、Sonatype 以外の他のリポジトリへの公開にも使用できます。
完全なプロジェクトをプッシュする前に、独立したリリースの大規模なプロジェクト全体でテストするために、ステージングされたリリースを使用します。
注意:
PGPException: checksum mismatch at 0 of 20
というエラーメッセージは、パスフレーズが間違っていることを示しています。少なくとも OS X では、7 ビット ASCII 範囲外の文字 (例: ウムラウト) に問題がある可能性があることがわかりました。正しいフレーズを入力したことが絶対に確実であり、エラーが消えない場合は、パスフレーズを変更してみてください。
注意: 2021 年 2 月以降に作成された新しい OSSRH アカウントを使用している場合は、
"oss.sonatype.org"
の代わりに"s01.oss.sonatype.org"
を使用してください。
注: sbt-release はサードパーティ製のプラグインであり、Lightbend のサブスクリプションの対象外です。
sbt-release プラグインを使用して上記の発行方法を自動化するには、releaseProcess
タスクのステップとして発行コマンドを追加するだけで済みます。
...
releaseStepCommand("sonatypeOpen \"your groupId\" \"Some staging name\""),
...
releaseStepCommand("publishSigned"),
...
releaseStepCommand("sonatypeRelease"),
...