部署到 Sonatype 很简单!只需按照以下简单步骤操作即可
在他们的 OSSRH 指南 中描述了配置和发布到 Sonatype 的参考流程。简而言之,您需要两个公开可用的 URL
OSSRH 指南 将引导您完成在 Sonatype 设置帐户所需的流程。就像在 创建 Sonatype 的 JIRA 帐户,然后创建一个 新项目工单 一样简单。在创建帐户时,尝试在您的电子邮件地址中使用与项目托管在同一域。这使 Sonatype 更容易验证与工单中请求的 groupId 之间的关系,但这并不是用于确认所有权的唯一方法。
创建新项目工单就像
在 JIRA 上创建 Sonatype 帐户后,您可以使用相同的凭据登录到 Nexus 仓库管理器,尽管指南中没有要求这样做,但这在以后检查已发布的工件时可能会有所帮助。
注意:Sonatype 建议回复新项目工单可能需要长达两个工作日,但在我的情况下,只用了几分钟。
为了满足 Sonatype 对发布到中央仓库的要求,并简化发布流程,您可以使用两个社区插件。 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>
注意:前两个字符串必须是
"Sonatype Nexus Repository Manager"
和"oss.sonatype.org"
,以便 Coursier 使用凭据。如果您使用的是 2021 年 2 月之后创建的新 OSSRH 帐户,请使用"s01.oss.sonatype.org"
而不是"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("http://www.apache.org/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 shell 运行
> 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 范围之外的字符(例如 Umlauts)可能会出现问题。如果您确定输入了正确的密码并且错误没有消失,请尝试更改密码。
注意:如果您使用的是 2021 年 2 月之后创建的新 OSSRH 帐户,请使用
"s01.oss.sonatype.org"
而不是"oss.sonatype.org"
注意:sbt-release 是一个第三方插件,这意味着它不包含在 Lightbend 订阅中。
要使用 sbt-release 插件 自动化上述发布方法,您只需将发布命令作为步骤添加到 releaseProcess
任务中即可
...
releaseStepCommand("sonatypeOpen \"your groupId\" \"Some staging name\""),
...
releaseStepCommand("publishSigned"),
...
releaseStepCommand("sonatypeRelease"),
...