ライブラリを作っていて、2.11と2.12両方共でビルドしたかったので、sbtでどうやるか調べた。
方法は非常に簡単で、https://www.scala-sbt.org/1.0/docs/Cross-Build.html#Cross-Building+a+Project を参考にすれば良い。
まずbuild.sbtにcrossScalaVersionsを記述。
crossScalaVersions := Seq("2.11.12", "2.12.4")
あとはsbtで+付きで実行すると両方のバージョンでsbtのタスクの実行を行える。
sbt:joda-time-fake> +compile [info] Setting Scala version to 2.12.4 on 1 projects. [info] Reapplying settings... [info] Set current project to joda-time-fake (in build file:/Users/shibayu36/development/src/github.com/shibayu36/joda-time-fake-scala/) [info] Updating ... [info] Done updating. [success] Total time: 1 s, completed Mar 22, 2018 7:36:15 AM [info] Setting Scala version to 2.11.12 on 1 projects. [info] Reapplying settings... [info] Set current project to joda-time-fake (in build file:/Users/shibayu36/development/src/github.com/shibayu36/joda-time-fake-scala/) [info] Updating ... [info] Done updating. [success] Total time: 0 s, completed Mar 22, 2018 7:36:15 AM [info] Reapplying settings... [info] Set current project to joda-time-fake (in build file:/Users/shibayu36/development/src/github.com/shibayu36/joda-time-fake-scala/)
もちろんテストとかも+付きで実行するだけでいい。
sbt:joda-time-fake> +test
++を使うと、Scalaのバージョン切り替えもできる。これを使えば+なしで普通に実行した時のバージョンを選択できる。
sbt:joda-time-fake> ++ 2.11.12 [info] Setting Scala version to 2.11.12 on 1 projects. [info] Reapplying settings... [info] Set current project to joda-time-fake (in build file:/Users/shibayu36/development/src/github.com/shibayu36/joda-time-fake-scala/) sbt:joda-time-fake> ++ 2.12.4 [info] Setting Scala version to 2.12.4 on 1 projects. [info] Reapplying settings... [info] Set current project to joda-time-fake (in build file:/Users/shibayu36/development/src/github.com/shibayu36/joda-time-fake-scala/)
sbt便利ですね。