1. 交叉构建插件

交叉构建插件 

就像我们能够针对多个 Scala 版本进行交叉构建一样,我们可以在保持 sbt 1.x 的情况下交叉构建 sbt 0.13 插件。

crossSbtVersions := Vector("1.2.8", "0.13.18")

如果你需要对特定 sbt 版本进行更改,你现在可以将它们包含到 src/main/scala-sbt-0.13src/main/scala-sbt-1.0 中。要切换 sbt 版本,请使用

^^ 0.13.18

[info] Setting `sbtVersion in pluginCrossBuild` to 0.13.18
[info] Set current project to sbt-something (in build file:/xxx/sbt-something/)

^compile 进行交叉编译。

在构建中混合库和 sbt 插件 

当你想要将库和 sbt 插件混合到多项目构建中时,基于 Scala 版本驱动 sbt 版本会更加方便。

你可以按照以下步骤进行操作

ThisBuild / crossScalaVersions := Seq("2.10.7", "2.12.10")

lazy val core = (project in file("core"))

lazy val plugin = (project in file("sbt-something"))
  .enablePlugins(SbtPlugin)
  .dependsOn(core)
  .settings(
    // change the sbt version based on Scala version
    pluginCrossBuild / sbtVersion := {
      scalaBinaryVersion.value match {
        case "2.10" => "0.13.18"
        case "2.12" => "1.2.8"
      }
    }
  )

这是 @jropersbt-pgp#115 中发现的技术。它之所以有效是因为 sbt 0.13 和 1.x 系列使用不同的 Scala 二进制版本。

使用该设置,你现在可以使用 Scala 交叉构建命令,例如 +compile+publish