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

2024-04-15

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


我总是忘记如何做到这一点。所以这是我的笔记:

一生中一次:

  1. Create Sonatype账户 https://issues.sonatype.org/secure/Signup!default.jspa

对于每台新的开发机器:

  1. Install gpg例如在 OSX 上:brew install gpg

  2. Run 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/ http://keyserver.ubuntu.com:11371/

  1. 通过搜索验证密钥已发布gnupg.net http://keys.gnupg.net/pks/lookup?search=0xF5003E5C4718B1F466B244F766AA02EC8AA60DB9 or 密钥服务器网 https://sks-keyservers.net/pks/lookup?search=0xF5003E5C4718B1F466B244F766AA02EC8AA60DB9. 这可能需要一天的时间才能显示

  2. Add 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. Create 使用您的 Sonatype 帐户请求新的存储库

  2. 等到上述问题 https://issues.sonatype.org/browse/OSSRH-18266?filter=-2已解决

  3. Add sbt-pgp, sbt-release and sbt-sonatype作为您项目的插件。这是一个例子插件.sbt https://github.com/pathikrit/better-files/blob/master/project/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. 这是一个例子构建.sbt https://github.com/pathikrit/better-files/blob/master/build.sbt我用于多个项目。

对于每个新版本:

  1. You may have to do export GPG_TTY=$(tty) to let gpg do password prompt in command line like below: enter image description here

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

    1. 注:+release跨您指定的交叉版本crossScalaVersions。如果你有pushChanges在您的构建中启用将您的提交推送到 git 远程,请确保您这样做pushChanges只在最后一次crossVersion.
  3. 查看工件于Sonatype https://oss.sonatype.org/content/repositories/releases/com/github/pathikrit/(快照版本是here https://oss.sonatype.org/content/repositories/snapshots/com/github/pathikrit/)。如果您在那里看不到它,您可以仔细检查Nexus 存储库管理器 https://oss.sonatype.org/#nexus-search;quick~better-files

  4. 等待几个小时让它传播到梅文中心 http://repo1.maven.org/maven2/com/github/pathikrit/

从头开始

  • Sometime release may fail midway and your repository might be stuck in staging. You then have to go to https://oss.sonatype.org https://oss.sonatype.org > Login > Staging Repositories > Find your repo > Click Drop e.g. enter image description here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 sbt 将 Scala 库发布到 Maven Central? 的相关文章

  • 如何在多模块 spring-boot maven 项目中构建特定模块

    我创建了一个多模块 Spring Boot Maven 项目 但是当我使用 mvn clean package pl module2 spring boot run 在控制台中 它告诉我 module1 中的某些类找不到 但我已经在 mod
  • Scala:如何将可变参数指定为类型?

    代替 def foo configuration String String 我希望能够写 type Configuration String String def foo configuration Configuration 主要用例是
  • Scala 的代码覆盖率工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 模拟 BlazeClientBuilder[IO] 以返回模拟客户端[IO]

    我正在使用BlazeClientBuilder IO resource方法得到Client IO 现在 我想模拟客户端进行单元测试 但不知道该怎么做 有没有一个好的方法来嘲笑这个 我会怎么做 class ExternalCall val r
  • 从 HList 获取元素

    我尝试了 HList 并按预期进行了以下工作 val hl 1 foo HNil val i Int hl 0 val s String hl 1 但是 我无法让以下代码正常工作 让我们暂时假设对列表进行随机访问是一个聪明的主意 class
  • 可选择将项目添加到 Scala 映射

    我正在寻找这个问题的惯用解决方案 我正在构建一个valScala 不可变 Map 并希望有选择地添加一项或多项 val aMap Map key1 gt value1 key2 gt value2 if condition key3 gt
  • 使用 net.liftweb.json 或 scala.util.parsing.json 解析大型 (30MB) JSON 文件会出现 OutOfMemoryException。有什么建议吗?

    我有一个包含大量测试数据的 JSON 文件 我想解析这些数据并推送我正在测试的算法 它的大小约为 30MB 包含大约 60 000 个元素的列表 我最初在 scala util parsing json 中尝试了简单的解析器 如下所示 im
  • 使用功能分支时避免 Maven 存储库版本冲突

    Question 如何处理 Maven 多项目构建的功能分支 Jenkins 构建和部署这些分支 以将开发人员的构建开销降至最低 但开发和功能分支无法构建相同的 Maven 版本 否则我们将面临工件和源代码之间不匹配的风险 我们有一个脚本来
  • Play框架:单属性案例类的JSON读取

    我正在尝试为包含单个属性的案例类创建隐式 JSON Reads 但收到错误 Reads Nothing 不符合预期类型 这是代码 import play api libs functional syntax import play api
  • Spring Boot 模板未解决

    我正在尝试使用 Spring Boot 和 Thymeleaf 构建一个独立的 Web 应用程序 该应用程序在 IntelliJ IDEA 中运行良好 但我无法单独运行该 jar 显然模板不包括在内 我的项目结构如下 src main ja
  • 理解 Scala FP 库

    只是为了让那些想要开始使用 Scala FP 库 在纯 FP 方面变得更好的人快速清晰地了解 有人能澄清猫和猫效应 猫效应 IO 之间的区别 关系吗 最重要的是 齐奥和莫尼克斯对此有何看法 最后 与 ScalaZ 7 8 有何关系 到目前为
  • Maven 按顺序构建所有内容

    我有一个项目 其中所有项目都有一个父 pom 定义如下
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications
  • Maven 构建错误 TOOLS.JAR NOT FOUND IN JRE

    我在构建 Maven 项目时遇到这个问题 请帮我解决 ERROR Failed to execute goal org apache maven plugins maven compiler plugin 2 5 1 compile def
  • Akka-Streams 收集数据(Source -> Flow -> Flow (collect) -> Sink)

    我对 Scala 和 Akka 完全陌生 我有一个简单的 RunnableFlow Source gt Flow do some transformation gt Sink runForeach 现在我想要这样的东西 Source gt
  • 应对失败的“未来”

    给出以下两种方法 def f Future Int Future 10 def g Future Int Future 5 我想把它们写成 scala gt import scala concurrent Future import sca
  • Scala Spark 包含与不包含

    我可以使用 contains 过滤 RDD 中的元组 如下所示 但是使用 不包含 来过滤 RDD 又如何呢 val rdd2 rdd1 filter x gt x 1 contains 我找不到这个的语法 假设这是可能的并且我没有使用Dat
  • 如何通过 javascript 和 ajax 调用 Scala 中的方法?

    我不知道我的标题是否有点误导 但这是我真正需要帮助的 我正在获取这个网址 get fb login fbEmail function data console log data 这是我的路线 GET fb login email prese
  • 如何在 sbt 控制台中加载 scala 文件? [复制]

    这个问题在这里已经有答案了 可能的重复 将 Scala 文件加载到解释器中以使用函数 https stackoverflow com questions 7383436 load scala file into interpreter to
  • 获取SettingKey[T]的值

    我正在开发一个用于文档生成的插件 我想将所有生成的文件输出到我选择的目录中 该目录可以是SBT的子目录target目录 如下 val newTargetDirectory SettingKey File document target di

随机推荐

  • 如何使用 React 过渡组为每个项目使用不同的延迟?

    我正在使用动画来制作一系列项目的进入和退出TransitionGroup and CSSTransition 具有淡入淡出效果 我希望这些项目之间有轻微的延迟 而不是同时出现 请注意 延迟可以低于动画的持续时间 使用我当前的代码 所有项目都
  • 为什么 grails run-app 在编译期间尝试访问远程服务器

    我发现我的 grails 应用程序编译过程中出现了一些错误 Loading Grails 2 0 4 Configuring classpath problems summary ERRORS Server access Error Une
  • 使用 Visual Studio 2012 构建面向 Windows XP 的 Boost 1.52 库

    Visual Studio 2012 Update 1 使用工具集 vc110 xp 启用了对 Windows XP 目标的支持 如何配置 Boost 1 52 以使用 vc110 xp 工具集构建库 我发现最简单的方法是编辑 Progra
  • 处理 android 中 RestClient 调用的连接和读取超时

    我有一个 RestService 接口 其中包含许多休息调用 我在整个应用程序中使用这些调用 我正在设置处理超时connection and read timeouts ClientHttpRequestFactory httpFactor
  • Powershell在导入txt文件时跳过前2行

    我有一个 powershell 脚本 旨在读取远程服务器上的 txt 文件并将其导入 SQL 中 我希望能够跳过 txt 文件的前两行 我目前正在使用下面的代码来导入文件 txt 文件已分隔 datatable new object Sys
  • 不使用 Obfuscator 的 DLL 加密

    事实上 我被分配了一项任务来保护我的 DLL 这样 如果我将我的软件部署到任何系统 就没有人可以修改或读取我的 DLL 你能帮我如何在不使用混淆器的情况下对其进行加密吗 您将需要软件来执行此操作 以下是您可能需要考虑的一些软件 Eazfus
  • 在另一个 AppDomain 中调用 Await 时没有 SynchronizationContext

    我已经成功构建了一个插件机制 可以在单独的 AppDomain 中创建 UI 控件 并将它们显示为主 AppDomain 中表单的一部分 这些 UI 控件会加载自己的数据 因此当我打开表单时 会创建大约 10 个不同的插件 每个插件都需要加
  • 在ExoPlayer中,到底如何使用SimpleExoPlayer.setVideoScalingMode就像在ImageView center-crop中一样?

    背景 我正在尝试以中心裁剪方式显示视频 就像在 ImageView 上一样 我也希望我能找到如何以其他方式扩展规模 就像上所做的那样这个图书馆 https github com yqritc Android ScalableVideoVie
  • 使用 NancyFX 时出现 Razor 编译错误

    我正在使用 Nancyfx 和 Visual Studio 2012 中的 Razor 视图引擎在 C 中创建一个黑杰克程序 Visual studios Intelisense 可以工作 但我收到这些 Razor 编译错误 我尝试在 ap
  • 重载Python中的所有算术运算符

    假设我构建一个类 它基本上代表一个数字加上一些奇特的东西 该类的实例的行为应该类似于任何算术 数学运算中的数字 我可以重载该类中的所有数字运算符 但是没有更短的解决方案吗 该类基本上如下所示 class MyFancyNumber def
  • Python 正则表达式错误字符范围。

    我使用以下正则表达式来匹配不同的日期模式 它在 regex101 com 中工作正常 但是当我导入到 python 时 我收到 错误字符范围 异常 pattern ur b january jan february feb march ma
  • Kivy AttributeError:“超级”对象没有 ScreenManager 的属性“__getattr__”[重复]

    这个问题在这里已经有答案了 我正在尝试将方法绑定到微调器的文本值 最迟需要在显示 TestScreen 时进行绑定 如果我不使用 ScreenManager 这将有效 例如 如果 TestApp build 返回 TestScreen 而不
  • 在持续集成下删除和创建数据库的防弹方法

    我正在尝试从 CI 设置中删除并重新创建数据库 但我发现很难自动删除和创建数据库 考虑到正在使用的数据库的复杂性 这是可以预料的 有时 进程会挂起 错误提示 数据库当前正在使用 或者只是花费太长时间 我不在乎数据库是否正在使用 我想杀死它并
  • 使用 phimagemanager 将图像保存到自定义相册?

    我正在制作一个使用 AVFoundation 拍照的应用程序 我想将它们保存到一个自定义相册中 然后我可以查询并在我的应用程序中显示 我不想把它们放在一般的照片卷中 除非用户想要 我真的找不到任何东西来展示如何在 Swift 中做到这一点
  • R: is.na() 没有获取 NA 值

    所以我有一个数据集 只需查看它 数据集中就有明显的 NA gt dput bmi cig structure list MSI subset BMI structure c 4L 4L 4L 4L 4L 4L 4L 4L 4L 4L 4L
  • 在类库中添加 System.Web.Script 引用

    我目前正在将代码从 app code 文件夹移动到类库 我已经标记了几种方法 System Web Script Serialization ScriptIgnore 属性 我的类库看不到这个命名空间 我的添加引用对话框看不到此命名空间 如
  • 如何使用 jQuery 验证检查确切的长度?

    使用jQuery 验证插件 http docs jquery com Plugins Validation要验证表单 您如何确认字符串的长度恰好是 X 个字符 由于 当前 没有内置方法 因此您需要添加自己的方法 这会起作用 jQuery v
  • 将nodejs添加到文件前面

    对于 Node js 以类似于以下方式添加到文件的最佳方法是什么 fs appendFile path join dirname app log appendme utf8 就个人而言 最好的方法实际上是围绕异步解决方案来创建日志 我基本上
  • axios默认超时是多少

    我在文档中找到了设置超时值的步骤 const instance axios create baseURL https some domain com api timeout 1000 headers X Custom Header foob
  • 如何使用 sbt 将 Scala 库发布到 Maven Central?

    我有一个使用 SBT 的开源 Scala 项目 我想将我的库发布到 Maven 我该怎么做 我总是忘记如何做到这一点 所以这是我的笔记 一生中一次 Create Sonatype账户 https issues sonatype org se