2012-08-15 61 views
9

我正在使用SBT 0.12.0如何讓任務依賴於sbt 0.12中的另一個?

我有兩個任務在我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,但此後doc已移動並更改)中描述的示例。

u2Task <<= u2Task dependsOn helloTask 

但我得到reassignment to val錯誤。顯然,我無法使用任何東西<<=工作。我究竟做錯了什麼?

回答

2

我得到它的工作。我誤解了<<=:=作爲賦值運算符。

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 
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] = [email protected] 

scala> val u2Task = TaskKey[Unit]("u2") := {println("u2")} 
u2Task: sbt.Project.Setting[sbt.Task[Unit]] = setting(ScopedKey(Scope(This,This,This,This),u2)) 
+1

你能得到那個工作?你能發佈你的完整配置文件嗎?因爲我收到了錯誤消息(http://pastebin.com/Tw8REnt5)。這裏是我的構建文件(http://pastebin.com/L5kAW36v)。我在這裏使用了sbt 0.12.0。 – 2012-08-15 11:28:35

+0

這是一個不同的問題。您的構建定義對我來說看起來很奇怪,您在libraryDependencies中添加了一個++ =語句。我不是一個專家,但看起來很奇怪。 – themel 2012-08-15 12:29:45

+0

它確實與我以前使用過的任務定義一起工作。我從scalaz和scala-graph項目中獲得了這種風格。順便說一下,你是如何在控制檯中包含sbt並檢查它的?我想試試看,所以我可能會想出一些東西。 – 2012-08-15 13:33:24