如何使用 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-pgpsbt-releasesbt-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&gt;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 项目中?

如何强制 Scala 使用不同的库版本?

如何将 sbteclipse 插件添加到 SBT 0.10.x

sbt-assembly 不包括 scala 库

如何将 Play 2.2 Scala 应用程序创建为 SBT 子项目

无法使用 scala 的 sbt 从存储库中获取插件