就像我们能够针对多个 Scala 版本进行交叉构建一样,我们可以在保持 sbt 1.x 的情况下交叉构建 sbt 0.13 插件。
crossSbtVersions := Vector("1.2.8", "0.13.18")
如果你需要对特定 sbt 版本进行更改,你现在可以将它们包含到 src/main/scala-sbt-0.13
和 src/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 插件混合到多项目构建中时,基于 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"
}
}
)
这是 @jroper 在 sbt-pgp#115 中发现的技术。它之所以有效是因为 sbt 0.13 和 1.x 系列使用不同的 Scala 二进制版本。
使用该设置,你现在可以使用 Scala 交叉构建命令,例如 +compile
和 +publish
。