1. プラグインのクロスビルド

プラグインのクロスビルド 

複数の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プラグインを混在させる 

ライブラリと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バイナリバージョンを使用しているために機能します。

この設定を使用すると、+compile+publishなどのScalaクロスビルドコマンドを使用できるようになります。