続・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