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

8hhllhi2  于 2023-02-08  发布在  Scala
关注(0)|答案(1)|浏览(189)

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

ymzxtsji

ymzxtsji1#

我总是忘了怎么做。下面是我的笔记:

一生中只有一次:

1.创建Sonatype account

对于每台新开发人员计算机:

1.例如,在OSX上安装gpgbrew install gpg
1.运行gpg --gen-key生成新密钥。记住您使用的密码和电子邮件
1.请确保在列出密钥时看到它:

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

1.发布您的密钥:

> 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验证密钥是否已发布。* 这可能需要一天时间才能显示 *
1.将default-key添加到您的gpg.conf

> cat ~/.gnupg/gpg.conf
default-key F5003E5C4718B1F466B244F766AA02EC8AA60DB9

1.将以下内容附加到此文件(~/.sbt/${SBT_VERSION}/sonatype.sbt):

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

对于每个新项目:

1.使用您的Sonatype帐户创建new JIRA issue以请求新的repo
1.等待above issue得到解决
1.将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")

1.下面是我用于多项目的build.sbt示例。

对于每个新版本:

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

  1. sbt +release(将提示输入您为gpg创建的密码)
    1.注意:+release会在你指定的crossScalaVersions上交叉发布。如果你在你的构建中启用了pushChanges来推送提交到git remote,请确保你只在最后一个crossVersion上执行一次pushChanges
    1.在Sonatype上查看工件(快照版本为here)。如果在那里看不到工件,可以仔细检查Nexus存储库管理器
    1.等待几个小时,让它传播到Maven Central

重新开始

  • 有时候发布可能会中途失败,您的存储库可能会在暂存中卡住。然后您必须转到https://oss.sonatype.org〉登录〉暂存存储库〉查找您的存储库〉单击删除,例如

相关问题