1. 在输入任务后执行操作

在输入任务后执行操作 

到目前为止,我们主要关注的是任务。还有一种称为输入任务的任务,它接受来自 shell 的用户输入。一个典型的例子是 Compile / run 任务。scalastyle 任务实际上也是一个输入任务。有关输入任务的详细信息,请参见 输入任务

现在假设我们要调用 Compile / run 任务,然后打开浏览器以进行测试。

src/main/scala/Greeting.scala 

object Greeting {
  def main(args: Array[String]): Unit = {
    println("hello " + args.toList)
  }
}

build.sbt v1 

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!

build.sbt v2 

我们可以通过将新的输入任务重写为 Compile / run 来实际删除 runopen

lazy val root = (project in file("."))
  .settings(
    Compile / run := {
      (Compile / run).evaluated
      println("open browser!")
    }
  )