【问题标题】:Create multiple publish tasks in sbt with cross-compilation使用交叉编译在 sbt 中创建多个发布任务
【发布时间】:2020-04-02 18:00:01
【问题描述】:

我有一个多项目 sbt 构建并希望创建多个发布命令来发布项目的不同子集。

为了速度,我通常只想发布两个 Scala 版本的项目 ab,但偶尔(例如,当一个版本被剪切时)我想发布所有依赖项,包括项目 @987654325 @ 和 d

build.sbt:

val scala212 = "2.12.10"
val scala211 = "2.11.8"
val supportedScalaVersions = Seq(scala212, scala211)
...

lazy val global = project
  .in(file("."))
  .settings(crossScalaVersions := Nil, ...)
  .aggregate(a, b)

lazy val a = project(...)
lazy val b = project(...)
lazy val c = project(...)
lazy val d = project(...)

...

请注意,建议在聚合项目中将 crossScalaVersion 设置为 nil in the sbt reference

sbt +publish 将只发布项目ab 跨两个缩放版本。如果我需要发布所有依赖项,我会从 sbt 控制台单独发布它们。

sbt> +publish; +c/publish; +d/publish

如何创建一个命令 (+publishAll) 来发布两个 Scala 版本中的所有子项目,同时保持默认的 publish 命令仅发布 ab

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    尝试将allinAnyProject 结合使用,就像这样

    val publishAll = taskKey[Unit]("Publish all projects")
    publishAll := publish.all(ScopeFilter(inAnyProject)).value
    

    它将在所有项目中执行publish 任务,即使是那些未被根项目聚合的项目。

    【讨论】:

    • 这很干净,似乎可以工作,只是该项目针对 2 个不同的 Scala 版本进行了交叉编译,并且这只部署了 ThisBuild / scalaVersion 版本。有没有办法让它与交叉编译一起工作?
    • @MichaelK 你试过以+publishAll 运行它吗?
    【解决方案2】:

    添加到build.sbt

    addCommandAlias("publishAll", "publish; c/publish; d/publish")
    

    普通publish 将始终适用于您的根项目及其聚合的项目,因此您可以将根项目的文件移动到子项目并更改其聚合的内容。

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2016-05-18
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      相关资源
      最近更新 更多