【问题标题】:sbt: cross-publish from build.sbtsbt:从 build.sbt 交叉发布
【发布时间】:2016-05-18 04:05:56
【问题描述】:

目前,我正在使用 SBT 脚本插件进行测试。要将插件发布到本地存储库,请使用 build.sbt 中的以下代码 sn-p:

crossScalaVersions := Seq(scalaVersion.value,"2.11.7")

scriptedDependencies := {
      val local = publishLocal.value
}

通过这种方式,工件会发布到本地存储库中,但仅适用于版本 scalaVersion.value。我想让它为两个 scala 版本交叉发布。我该怎么做?

【问题讨论】:

  • 您是否使用+publishLocal+ ?那应该这样做。另外,我建议不要在crossScalaVersions 的定义中引用scalaVersion。那是自找麻烦。明确写 "2.10.6" 或你想要的。
  • 感谢您的回复。但问题是关于 build.sbt,而不是命令行。有一个 TaskKey publishLocal+ 由 sbt 解释器提供。例如,您可以通过在 sbt 控制台中输入 help + 来检查
  • scriptedDependencies 不适合这样使用。 sbt 意味着可以以交互方式调用,也可以通过命令行上的一个或多个命令调用。那就是你要写+publishLocal的地方。例如$ sbt +publishLocal
  • 我认为这是一个有效的问题。无论为什么问题的作者想要这样做,答案都会很有用。我不购买sbt“旨在以交互方式调用”的论点,因为它还为您提供了 API 和编写您自己的任务的方法。在您自己的自定义任务中,您可能需要例如以编程方式交叉发布一些模块。我现在很需要

标签: scala sbt


【解决方案1】:

正如 @srjd 在 cmets 中提到的,您可以使用 + 前缀。

正如section of the docs中提到的那样

要针对 crossScalaVersions 中列出的所有版本进行构建,请在要运行的操作前加上 +。例如:

> + test

使用此功能的典型方法是在单个 Scala 版本(无 + 前缀)上进行开发,然后偶尔和发布时交叉构建(使用 +)。

这适用于任何操作,包括publisLocal

> + publishLocal

【讨论】:

  • 感谢您的回复。如前所述,问题是关于 build.sbt,而不是命令行。有一个 TaskKey publishLocal 并且 + 由 sbt 解释器提供。例如,您可以通过在 sbt 控制台中输入 help + 来检查
猜你喜欢
  • 1970-01-01
  • 2015-10-20
  • 2018-09-06
  • 1970-01-01
  • 2014-07-17
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多