如何在sbt

时间:2016-04-13 13:09:10

标签: scala sbt

我试图覆盖sbt中的it:run任务,以便它按顺序运行另外两个任务(实际上是三个,如果你包括日志记录)。第一项任务是配置应用程序(it:provision),第二项是实际运行测试(it:test)。

我开始使用简单Task[Unit]进行自定义provision任务。

lazy val provision = taskKey[Unit]("Provisions the application in an environment based on the configuration.")

然后我定义了一个用于it:run实现的函数:

def runIntegrationTestsImpl(): Initialize[Task[Unit]] = Def.inputTask {
  Def.sequential(
    provision in IntegrationTest,
    Def.task(state.value.log.info("Running integration tests.")),
    test in IntegrationTest
  ).value
}

这很好用。然而,我真正想要的是将配置任务设为InputTask[Unit]

所以我随后将provision更改为:

lazy val provision = inputKey[Unit]("Provisions the application in an environment based on the configuration.")

并尝试更新it:run实施:

def runIntegrationTestsImpl(): Initialize[InputTask[Unit]] = {
  val parser = DefaultParsers.any.*.map(_.mkString)
  Def.inputTask {
    val prov = (provision in IntegrationTest).toTask(parser.parsed)
    Def.sequential(
      prov,
      Def.task(state.value.log.info("Running integration tests.")),
      test in IntegrationTest
    ).value
  }
}

这就像我编译它一样接近。我并不打算在这里解析参数,但似乎toTask是获得Initialize[Task[Unit]]的唯一方法。

无论我尝试做什么,我仍然无法摆脱以下错误:

  

非法动态参考:prov

这是指序列中的第一个元素。

我似乎用sbt宏来解决这个问题。有没有办法达到我想要的目的?

0 个答案:

没有答案