0.13.0-M1が出たので、0.12系からの違いや新機能を、大まかにまとめ。
注意
- まだMilestoneなので、finalのリリースまでに細かい部分変わるかもしれません。
- まだMilestoneなので、
このblog書いている時点(2013-03-20)では、普通のユーザーが本格的に実用するのはやめたほうがいいです。もうfinalでたのでみんな使おう - 全部網羅しませんし、細かいところまで説明しません。詳しく正確に知りたい人は公式のこのページ http://www.scala-sbt.org/0.13.0/docs/Community/ChangeSummary_0.13.0.html (や、それの日本語訳 http://eed3si9n.com/ja/node/142 )読みましょう
注意おわり。ここから説明。
↓
つまり、Build.scalaでしかできなかったことが、ほとんどbuild.sbtでできるようになるので、Build.scalaを書く機会がほとんどなくなります!
ちなみに0.13.0-M1で試した限り、トップレベルのclassやtraitやobjectの定義は、build.sbtではできないようです。
具体的には、複数プロジェクトの場合、以下のような感じでBuild.scalaを書いていると思いますが
import sbt._,Keys._ object build extends Build{ val hoge = TaskKey[Int]("hoge") lazy val foo = Project( // プロジェクトの定義 ) lazy val bar = Project( // プロジェクトの定義 ) }
- import sbtやimport Keysは(デフォルトでimportされるので)必要なく
- sbt.Buildを継承して
object
を定義していたのを消してその中身をそのまま以下のようにbuild.sbtに書く
// これは build.sbt だよ val hoge = TaskKey[Int]("hoge") lazy val foo = Project( // プロジェクトの定義 ) lazy val bar = Project( // プロジェクトの定義 )
と、ほとんどの場合はそのまま動きます!
ただし、(finalリリースまでには直るはずですが) aggregate のための root のプロジェクトを build.sbt に file(".")
というディレクトリ指定で書くと無限ループしてsbt自体立ち上がらないという、結構残念なバグがあるので
https://groups.google.com/d/msg/simple-build-tool/5EbK-Tg9iho/BtzkPsLNmrYJ
0.13.0-M1で試す人は注意してください。
0.13.0-M2で、なおったみたいです。
あとは、taskKeyやsettingKeyやprojectの定義に関していくつかマクロが導入されました。今まで以下のように書いていたものが
val hoge = TaskKey[Unit]("hoge", " hoge という文字を print するだけの task ")
マクロを使うことにより、以下と等価です
val hoge = taskKey[Unit](" hoge という文字を print するだけの task ") // この場合 description が必須になる
以前書きましたが
マクロ*3で、変数名の文字列を無理やり取得してきて、それがそのままTaskKeyの名前になります。上記の例はTaskkeyですが、SettingKeyやProjectの定義でも、同じようなマクロを使った仕組みが用意されるようです。マクロを使った新しい記法は追加されますが、引き続き今までの書き方もつかえます。
また、この影響で今までKeyの名前は "console-project" というように、ハイフン区切りだったものが、 "consoleProject" というように CamelCase が強く推奨になります。
しかも*4
ハイフン区切りでKeyの名前を定義しても、sbt側で半強制的にCamelCaseに置き換えるようです!
おぉ・・・。
半強制的というのは、"foo-bar" という名前でKeyを定義しても、sbtコンソール上では"fooBar"という名前でタブ補完されます。(ただし、tab補完使わずfoo-barと打っても、とりあえずは有効らしい)
まだまだ変更点色々ありますが、自分が感じた大きな変更点はこんな感じです。