複数の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バイナリバージョンを使用しているために機能します。
この設定を使用すると、+compile
や+publish
などのScalaクロスビルドコマンドを使用できるようになります。