如何使用 sbt 将 Scala 库发布到 Maven Central?

How to release a Scala library to Maven Central using sbt?

我有一个使用 SBT 的开源 Scala 项目,我想将我的库发布到 Maven。我该怎么做?

我总是忘记怎么做。所以这是我的笔记:

一生一次:

  1. 创建Sonatype account

对于每台新的开发人员机器:

  1. 安装 gpg 例如在 OSX 上:brew install gpg

  2. 运行 gpg --gen-key 生成新密钥。 记住您使用的密码和电子邮件

  3. 确保在列出密钥时看到它:

    > 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]
    
  4. 发布您的密钥:

    > 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/

  1. 通过搜索 gnupg.net or keyserver.net 验证密钥是否已发布。 这最多可能需要一天才能显示

  2. default-key 添加到您的 gpg.conf:

    > cat ~/.gnupg/gpg.conf
    default-key F5003E5C4718B1F466B244F766AA02EC8AA60DB9
    
  3. 将以下内容附加到此文件 (~/.sbt/${SBT_VERSION}/sonatype.sbt):

    credentials += Credentials("Sonatype Nexus Repository Manager", "oss.sonatype.org", "<your username>", "<your password>")
    

对于每个新项目:

  1. 使用您的 Sonatype 帐户创建 new JIRA issue 以请求新的存储库

  2. 等到above issue解决

  3. 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")
    
  4. 这是我用于多项目的示例 build.sbt

对于每个新版本:

  1. 您可能必须执行 export GPG_TTY=$(tty) 才能让 gpg 在命令行中执行密码提示,如下所示:

  2. sbt +release(将提示输入您为 gpg 创建的密码)

    1. 注意:+release 跨您指定的 crossScalaVersions 交叉发布。如果您在构建中启用了 pushChanges 以将您的提交推送到 git 远程,请确保您只在最后一个 crossVersion.
    2. 上执行 pushChanges 一次
  3. Sonatype (the snapshot versions are here). If you cannot see it there you can double check the Nexus Repository Manager

  4. 上查看工件
  5. 等待几个小时让它传播到 Maven Central

重新开始

  • 有时发布可能会中途失败,您的存储库可能会卡在暂存中。然后你必须去 https://oss.sonatype.org > Login > Staging Repositories > Find your repo > Click Drop e.g.