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 ...