我正在使用SBT 0.12.0.
我有两个任务在我project/Build.scala- helloTask和u2定义如下:
val hello = TaskKey[Unit]("hello", "Prints 'Hello World'")
val helloTask = hello := {
println("Hello World")
}
val u2Task = TaskKey[Unit]("u2") := { println("u2") }
Run Code Online (Sandbox Code Playgroud)
如何让u2任务取决于hellotask?我<<=按照任务中描述的那样使用了样本(在问题的原始版本中它是https://github.com/harrah/xsbt/wiki/Tasks,但是文档已经移动和更改).
u2Task <<= u2Task dependsOn helloTask
Run Code Online (Sandbox Code Playgroud)
但我得到了reassignment to val错误.显然,我无法得到任何<<=工作.我究竟做错了什么?
我没有看到你非常密切地关注这个样本 - 这对我有用:
val helloTask = TaskKey[String]("hello")
val u2Task = TaskKey[Unit]("u2")
helloTask := {
println("Hello World")
"Hello World"
}
u2Task := {println("u2")}
u2Task <<= u2Task.dependsOn (helloTask)
Run Code Online (Sandbox Code Playgroud)
确切的原因是你的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))
Run Code Online (Sandbox Code Playgroud)
我让它工作了。我将<<=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")}
Run Code Online (Sandbox Code Playgroud)
和结果
> u2
Hello World
u2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3997 次 |
| 最近记录: |