私は~ ;task1; task2;
に満足していませんので、変更を監視してタスクを実行する私自身のタスクを実装したいと思います。私。いくつかのファイルを監視し、何が変更されたかによっていくつかのタスクを実行するsbtタスクが必要です。sbtでカスタムウォッチタスクを実装する方法は?
val task1: Initialize[Task[Int]] = ....
val task2: Initialize[Task[Int]] = ....
myTask := {
log.info("Press Enter to stop watching...")
while(isEnterNotPressedYet) {
if (someFilesChanged)
execute(task1) //start task1 and wait for its termination
else if (someOtherFilesChanged)
execute(task2)
Thread.sleep(watchDuration.value)
}
}
task1.value
それは体前タスク1を実行し、一度だけになるので、動作しません。 dynTask
は、ループを離れることなく複数回タスクを実行したいので機能しません。正確には、質問は次のように実装する方法である:
def execute[T](task: Initialize[Task[T]]): T
def isEnterNotPressedYet: Boolean
背景:
私はJSを使用するWebアプリケーション、スカラ座、SBT-リボルバーを持っています。いくつかのリソースはホットリロードをサポートしています(ただし、まだコンパイルが必要です)。私。 * .jsファイルが変更された場合は、compileJs
というタスクを呼び出す必要があります。 .scalaファイルが変更された場合は、re-start
というタスクを起動します。しかし、SBTウォッチは、プロジェクトごとに1セットの監視リソースしか持っていません...