2016-07-18 8 views
1

私は~ ;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セットの監視リソースしか持っていません...

答えて

1

SBTソースに潜入し、それを私自身で実装しなければなりませんでした。 奇妙なSBTの振る舞いを回避する方法はかなりありますが、うまくいきます!

https://github.com/scf37/sbt-overwatch

関連する問題