読者です 読者をやめる 読者になる 読者になる

続・sbt 0.9でCompileに依存するタスクを書く(失敗検知編)

sbt 0.9でCompileに依存するタスクを書く - Secret Sword!!!で書いたCompile依存タスクだけど、
Compileに失敗したときにもhoge-taskが実行されてしまってちょっとアレだったのでちゃんとwikiを読んで書き直した。

MapR

https://github.com/harrah/xsbt/wiki/Tasks の下の方に書いてあるMapRを使って
Compile失敗後と成功後のタスクを分けて書けた。もっといい方法があるかも・・・

project/Build.scala
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 <<= (Keys.compile in Compile) mapR {
      case Inc(inc: Incomplete) => error("しっぱい")
      case Value(v) => println("hoge")
    }
  )
  
  lazy val hogeTask = TaskKey[Unit]("hoge-task")
  
}
実行結果

ちゃんとコンパイル失敗したときはerrorで終了してる

> 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
[error] /home/voidy21/prog/hoge/src/main/scala/Main.scala:3: not found: value rintln
[error]     rintln("Hello, Scala!")
[error]     ^
[error] one error found
[error] Incomplete tasks (run 'last <task>' for the full log):
[error]   {file:/home/voidy21/prog/hoge/}root/*:hoge-task: java.lang.RuntimeException: しっぱい
[error] Total time: 1 s, completed 2011/05/26 1:58:33
> 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: 1 s, completed 2011/05/26 1:58:42