9

我正在使用 SBT 0.12.0

我有两个任务-project/Build.scala定义如下:helloTasku2

val hello = TaskKey[Unit]("hello", "Prints 'Hello World'")

val helloTask = hello := {
  println("Hello World")
}

val u2Task = TaskKey[Unit]("u2") := { println("u2") }

如何使u2任务依赖hellotask?我使用了Tasks<<=中描述的示例(在问题的原始版本中它是https://github.com/harrah/xsbt/wiki/Tasks,但文档已经移动和更改)。

u2Task <<= u2Task dependsOn helloTask

但我得到了reassignment to val错误。显然,我无法得到任何<<=工作。我究竟做错了什么?

4

2 回答 2

9

我没有看到您非常密切地关注示例 - 这对我有用:

  val helloTask = TaskKey[String]("hello")
  val u2Task = TaskKey[Unit]("u2") 

  helloTask := {
    println("Hello World")
    "Hello World"
  }

  u2Task := {println("u2")} 

  u2Task <<= u2Task.dependsOn (helloTask)

确切的原因是您对 u2Task 的定义具有不同的类型,您可以在 REPL 中看到:

scala> val u2Task = TaskKey[Unit]("u2")
u2Task: sbt.TaskKey[Unit] = sbt.TaskKey$$anon$3@101ecc2

scala> val u2Task = TaskKey[Unit]("u2") := {println("u2")}
u2Task: sbt.Project.Setting[sbt.Task[Unit]] = setting(ScopedKey(Scope(This,This,This,This),u2))
于 2012-08-15T08:38:33.637 回答
2

我让它工作。<<=我将and运算符误解:=为赋值运算符。

  val hello = TaskKey[Unit]("hello", "Prints 'Hello World'")

  val helloTask = hello := {
     println("Hello World")
  }

  val u2 = TaskKey[Unit]("u2", "print u2")
  val u2Task = u2 <<= hello map {_ => println("u2")} 

和结果

> u2
Hello World
u2
于 2012-08-17T04:32:03.763 回答