2016-07-18 10 views
1

Ich bin unzufrieden mit ~ ;task1; task2;, also möchte ich meine eigene Aufgabe implementieren, die nach Änderungen sucht und Aufgaben ausführt. I.e. Ich brauche eine sbt-Aufgabe, die nach einigen Dateien sucht und einige Aufgaben ausführt, abhängig davon, was geändert wird.Wie benutzerdefinierte Überwachungsaufgabe in sbt implementieren?

z.B.

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 wird nicht funktionieren, weil es task1 vor dem Körper und nur einmal ausgeführt wird. dynTask funktioniert nicht, weil ich Aufgaben mehrmals ausführen möchte und die Schleife nicht verlassen möchte. Genau Frage ist, wie folgt umzusetzen:

def execute[T](task: Initialize[Task[T]]): T 
def isEnterNotPressedYet: Boolean 

Hintergrund:

Ich habe Web-Anwendung, die verwendet JS, Scala, sbt-Revolver. Einige Ressourcen unterstützen das Warmladen (müssen aber trotzdem kompiliert werden!), Andere nicht. I.e. Wenn * .js Dateien ändern, möchte ich compileJs Aufgabe aufrufen. Wenn sich .scala-Dateien ändern, möchte ich re-start Aufgabe aufrufen. Aber sbt watch hat nur einen Satz von beobachteten Ressourcen pro Projekt ...

Antwort