$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

sbtで複数のScalaのバージョンでビルドする

ライブラリを作っていて、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便利ですね。