一般的な答え:
あなたの一般的な質問に答えるために、解決策は、あなたのタスクは他のタスクに依存することです。 (0.13風の構文で)、このような作業をあなたが依存などの依存システム、並列実行システム、走り回っ終了を行うと、呼び出しますタスクを直接呼び出す:
myTask := {
...
val result = otherTask.value
...
}
注otherTask
をその依存関係が表示されるmyTask
の本文のポイントではなく、myTask
が開始される前に呼び出されます。依存関係がどのように機能するのかが分かるからです。
「通常の」方法が不適切または不適切な場合は、タスクの宣言とその実装を分離することがsbtの優れたスタイルであると考えてください。典型的なタスクの実装は単に引数をマーシャリングし、実際にその作業を行うメソッドを呼び出します。そのようにして呼び出すタスクが実装されている場合、「タスクTを呼び出すにはどうすればよいですか?」という答えが返されます。 "しないでください:同じコードTを呼び出して呼び出します。"
具体的な答え:あなたが実際に解決しようとしている問題があるよう
しかし、あなたの例から、それは私には見えます「どのように私は実行に加えて、カスタムの実行タスクを作成することができますか?」この質問はsbt FAQで回答されています。 http://www.scala-sbt.org/0.13.0/docs/faq.htmlを参照してください。答えは、便利なメソッドfullRunTask
とfullRunInputTask
を使用することです。
これらのメソッドのソースコードを見ると、別のタスクを呼び出すタスクを作成しないことがわかります。むしろ、彼らは "同じコードを呼び出す"アプローチを採用しています。
これはまだ0.13.9に適用できますか?カスタムタスクの中で '(コンパイル時に.value'を実行する)を含まないのはなぜですか?私の場合は、どのような方法でも 'run'をオーバーライドすることなく、依存プロジェクトの' run'タスクを実行するカスタムタスクしか必要としません。 – matanster
'run'の振る舞いについて何か変更する必要がない場合、それはうまく聞こえます。 (私は私の答えの最初の部分でそう言ったと思う。) –
私の場合は何も起こらない。 '(SubProjectでコンパイルする).value'は動作しますが、'(SubProjectでコンパイルで実行します).value'は動作しません。おそらくそこに '実行'のための特別なsomethings。たぶん私はそれのための新しい質問を開く必要があります。 – matanster