Sbt (3) Tasks

1. Defining a Task:

編輯 build.sbt,並在裡面定義 task:

$ vim build.sbt

在 build.sbt 加入下面的程式:

lazy val intTask = taskKey[Int]("An int task")

intTask := {
 printf("val: %d\n", 1+2)
 1 + 2
}

我們先宣告一個 taskKey 物件,它會回傳 Int (正確來說是任務回傳 Int,它本身是個 template),緊跟著的字串是註解用。 我們再用 := 定義函數的部份。

使用 sbt 執行 intTask:

$ sbt intTask

2. .value:

這次我們把 build.sbt 修改一下:

lazy val intTask = taskKey[Int]("An int task")
intTask := {
  printf("val(intTask): %d\n", 1+2)
  1 + 2 
}

lazy val stringTask = taskKey[String]("An string task")
stringTask := {
  val res = s"val(stringTask): ${intTask.value}"
  println(res)
  res 
}

執行 stringTask:

$ sbt stringTask

...
val(intTask): 3
val(stringTask): 3

我們發現在執行 stringTask 時我們呼叫了 intTask.value 所以 intTask 也被執行了,會先印出 intTask 再印出 stringTask 的字串。 另外我們還發現透過 intTask.value 我們能取得該任務的回傳值。


3. Task Scope:

我們還可以指定使用不同 scopes 的 task。

stringTask in Test := "val: " + (intTask in Compile).value

留言

熱門文章