説明したように、これはSBTが1つのインスタンスで処理できるタスクではありません。必要なのは、監視プロセスを中止して独自の設定をリロードするためにSBTを再起動することです。
次のScalaスクリプトは、Java NIO WatchServiceとScala Processを使用してパスを監視し、プロセスを再起動します。あなたのsbtディレクトリ内
#!/usr/bin/env scala
import java.nio.file._
import scala.collection.JavaConversions._
import scala.sys.process._
val file = Paths.get(args(0))
val cmd = args(1)
val watcher = FileSystems.getDefault.newWatchService
file.register(
watcher,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE
)
def exec = cmd run true
@scala.annotation.tailrec
def watch(proc: Process): Unit = {
val key = watcher.take
val events = key.pollEvents
val newProc =
if (!events.isEmpty) {
proc.destroy()
exec
} else proc
if (key.reset) watch(newProc)
else println("aborted")
}
watch(exec)
使用法は次のようになります:コードを理解することはかなり簡単であるべき
watchr.scala project/ "sbt ~ test:compile"
何を依頼することを躊躇しない不明である場合は、もちろん任意のスクリプト言語を使用することができますこの動作を実装します。
出典
2013-10-24 06:23:39
Bob
プロジェクトフォルダを変更して監視し、SBTを正常にシャットダウンすることはできますか? – Schleichardt