到目前为止,我们主要关注的是任务。还有一种称为输入任务的任务,它接受来自 shell 的用户输入。一个典型的例子是 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 作为副作用来模拟浏览器打开。现在我们可以从 shell 调用此任务
> 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!")
    }
  )