我对~ ;task1; task2;
不满意所以我想实现我自己的任务,监视更改并执行任务。即我需要一个sbt任务来监视一些文件,并根据更改的内容运行一些任务。
e.g。
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
将不起作用,因为它将在正文之前执行task1并且只执行一次。 dynTask
将不起作用,因为我想多次执行任务而不离开循环。确切地说,问题是如何实现以下内容:
def execute[T](task: Initialize[Task[T]]): T
def isEnterNotPressedYet: Boolean
背景:
我有使用JS,Scala,sbt-revolver的Web应用程序。有些资源支持热重载(但仍需要编译!),有些则不支持。即如果* .js文件发生变化,我想调用compileJs
任务。如果.scala文件发生变化,我想调用re-start
任务。但是sbt watch每个项目只有一组观察资源......
答案 0 :(得分:2)
不得不深入研究SBT资源并自行实施。 有很多关于奇怪的SBT行为的解决方法,但它有效!