【问题标题】:How to release a Scala library to Maven Central using sbt?如何使用 sbt 将 Scala 库发布到 Maven Central?
【发布时间】:2018-02-08 08:29:19
【问题描述】:

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

【问题讨论】:

    标签: scala maven sbt maven-central sbt-release


    【解决方案1】:

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

    一生一次:

    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.netkeyserver.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 以请求新的 repo

    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 remote,请确保您只在最后一个 crossVersion 上执行一次 pushChanges
    3. Sonatype 上查看工件(快照版本为here)。如果您在那里看不到它,您可以仔细检查Nexus Repository Manager

    4. 等待几个小时让它传播到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
    猜你喜欢
    • 2016-01-11
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2021-10-02
    • 2021-06-08
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多