如何使用 sbt 将 Scala 库发布到 Maven Central?
Posted
技术标签:
【中文标题】如何使用 sbt 将 Scala 库发布到 Maven Central?【英文标题】:How to release a Scala library to Maven Central using sbt? 【发布时间】:2018-02-08 08:29:19 【问题描述】:我有一个使用 SBT 的开源 Scala 项目,我想将我的库发布到 Maven。我该怎么做?
【问题讨论】:
【参考方案1】:我总是忘记怎么做。所以这是我的笔记:
一生一次:
-
创建Sonatype account
对于每台新的开发者机器:
安装gpg
例如在 OSX 上:brew install gpg
运行gpg --gen-key
以生成新密钥。 记住您使用的密码和电子邮件。
确保在列出密钥时看到它:
> gpg --list-secret-keys
~/.gnupg/pubring.kbx
-----------------------------------
sec rsa2048 2019-06-13 [SC] [expires: 2021-06-12]
F5003E5C4718B1F466B244F766AA02EC8AA60DB9
uid [ultimate] Pathikrit Bhowmick <pathikritbhowmick@msn.com>
ssb rsa2048 2019-06-13 [E] [expires: 2021-06-12]
发布您的密钥:
> gpg --keyserver hkp://pool.sks-keyservers.net --send-keys F5003E5C4718B1F466B244F766AA02EC8AA60DB9
gpg: sending key 66AA02EC8AA60DB9 to hkp://pool.sks-keyservers.net
您也可以通过复制密钥手动发布您的密钥
> gpg --armor --export F5003E5C4718B1F466B244F766AA02EC8AA60DB9
并在这里提交http://keyserver.ubuntu.com:11371/
通过搜索 gnupg.net 或 keyserver.net 验证密钥是否已发布。 这可能需要一天时间才能显示出来
将default-key
添加到您的gpg.conf
:
> cat ~/.gnupg/gpg.conf
default-key F5003E5C4718B1F466B244F766AA02EC8AA60DB9
将以下内容附加到此文件 (~/.sbt/$SBT_VERSION/sonatype.sbt
):
credentials += Credentials("Sonatype Nexus Repository Manager", "oss.sonatype.org", "<your username>", "<your password>")
对于每个新项目:
使用您的 Sonatype 帐户创建 new JIRA issue 以请求新的 repo
等到above issue 解决
将sbt-pgp
、sbt-release
和sbt-sonatype
作为插件添加到您的项目中。这是一个例子plugins.sbt:
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.0")
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "0.5.1")
这是我用于多项目的示例build.sbt。
对于每个新版本:
你可能需要export GPG_TTY=$(tty)
让gpg
在命令行中提示密码,如下所示:
sbt +release
(将提示输入您为gpg
创建的密码)
-
注意:
+release
跨您指定的crossScalaVersions
交叉发布。如果您在构建中启用了 pushChanges
以将您的提交推送到 git remote,请确保您只在最后一个 crossVersion
上执行一次 pushChanges
。
在Sonatype 上查看工件(快照版本为here)。如果您在那里看不到它,您可以仔细检查Nexus Repository Manager
等待几个小时让它传播到Maven Central
重新开始
有时发布可能会在中途失败,您的存储库可能会卡在暂存中。然后,您必须转到 https://oss.sonatype.org > 登录 > 暂存存储库 > 查找您的存储库 > 单击 Drop 例如【讨论】:
我正在尝试sbt>module/publishSigned
。它抛出错误:[error] gpg: [don't know]: invalid packet (ctb=2d) [error] gpg: keydb_search failed: Invalid packet [error] gpg: no default secret key: Invalid packet [error] gpg: signing failed: Invalid packet
你知道如何解决这个问题吗?
是否需要在 sbt +release 之后运行 sbt publishSigned?
@Pranjut:不,如果你像我一样配置了release
任务,你不会这样做
另外,Maven Central 将从 2021 年 4 月起停止支持 com.github.*
,替代方案是使用 io.github.*
central.sonatype.org/changelog/…
顺便说一下,这里是 sbt 官方文档,用于将 jars 上传到 Maven Central -> scala-sbt.org/release/docs/Using-Sonatype.html以上是关于如何使用 sbt 将 Scala 库发布到 Maven Central?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SBT 将 MATSim 添加到我的 Scala 项目中?
如何将 sbteclipse 插件添加到 SBT 0.10.x