これまで、主にタスクを見てきました。シェルからユーザー入力を受け付ける入力タスクと呼ばれる別の種類のタスクがあります。これの典型的な例は、Compile / runタスクです。scalastyleタスクも実際には入力タスクです。入力タスクの詳細については、入力タスクを参照してください。
さて、Compile / runタスクを呼び出してから、テスト目的でブラウザを開きたいとしましょう。
object Greeting {
def main(args: Array[String]): Unit = {
println("hello " + args.toList)
}
}
lazy val runopen = inputKey[Unit]("run and then open the browser")
lazy val root = (project in file("."))
.settings(
runopen := {
(Compile / run).evaluated
println("open browser!")
}
)
ここでは、副作用としてprintlnを使用してブラウザの開く動作を模倣しています。このタスクはシェルから呼び出すことができます。
> runopen foo
[info] Compiling 1 Scala source to /x/proj/...
[info] Running Greeting foo
hello List(foo)
open browser!
新しい入力タスクをCompile / runに書き直すことで、実際にはrunopenキーを削除できます。
lazy val root = (project in file("."))
.settings(
Compile / run := {
(Compile / run).evaluated
println("open browser!")
}
)