2012-08-15 6 views
9

私はSBT 0.12.0を使用しています。タスクを作る方法は、sbt 0.12で別のタスクに依存していますか?

私は私のproject/Build.scalaに2つのタスクました - 次のように定義されhelloTasku2を:

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

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

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

hellotaskに依存u2タスクを作成する方法は?私は、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を使用しました。 –

+0

これは別の質問です。あなたのビルド定義は私には奇妙に見えますが、libraryDependenciesの途中に++ =ステートメントを追加しています。私はsbtの専門家ではないが、それは奇妙に見える。 – themel

+0

これまでに使っていた自分のタスク定義でうまくいきました。私はscalazとscala-graphプロジェクトからこのスタイルを得ました。ところで、どうやってコンソールにsbtを組み込み、それを調べましたか?私はそれを試してみたいので、何かを考え出すかもしれません。 –

関連する問題