sbt 0.9でCompileに依存するタスクを書く

sbt 0.9むずかしい!
sbt 0.7と比べてシンプルになった部分とそうでない部分の差が激しいと思う。
良い子のみんなはstable版の0.10から使い始めるといいよ。悪い子は今すぐsbt 0.9.7を落とそう!

もちろん本家はこっち

https://github.com/harrah/xsbt

このwikiとソースくらいしか頼りにならないからみなさん早く使いましょう

https://github.com/harrah/xsbt/wiki

project/Build.scala

Keys.compile in Compileっていうのがポイント。
Commands · harrah/xsbt Wiki · GitHubにちょろっと書いてある。

import sbt._

object MyBuild extends Build {
  lazy val projects = Seq(root)
  
  lazy val root = Project("root", file("."), 
    settings = Defaults.defaultSettings ++  rootSettings)

  lazy val rootSettings = Seq(
    hogeTask := println("hoge"),
    hogeTask <<= hogeTask.dependsOn(Keys.compile in Compile)
  )
  
  lazy val hogeTask = TaskKey[Unit]("hoge-task")
  
}
実行結果

inspectコマンドを打ったりすると依存関係がわかる。
ちゃんとCompileのあとにhoge-taskが動いている!

> inspect hoge-task
[info] Task
[info] Description:
[info]
[info] Provided by:
[info]  {file:/home/voidy21/prog/hoge/}root/*:hoge-task
[info] Dependencies:
[info]  {file:/home/voidy21/prog/hoge/}root/compile
[info] Delegates:
[info]  {file:/home/voidy21/prog/hoge/}root/*:hoge-task
[info]  {file:/home/voidy21/prog/hoge/}/*:hoge-task
[info]  */*:hoge-task
> hoge-task
Compiling:
        /home/voidy21/prog/hoge/src/main/scala/Main.scala
Traversing /home/voidy21/prog/hoge/src/main/scala/Main.scala
API phase took : 0.038 s
hoge
[success] Total time: 3 s, completed 2011/05/24 0:41:20