【问题标题】:How to implement custom watch task in sbt?如何在 sbt 中实现自定义监视任务?
【发布时间】:2017-04-05 16:23:57
【问题描述】:

我对@9​​87654321@ 不满意,所以我想实现我自己的任务,监视变化并执行任务。 IE。我需要一个 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 将不起作用,因为它将在主体之前执行 task1,并且只执行一次。 dynTask 将不起作用,因为我想多次执行任务并且不离开循环。确切地说,问题是如何实现以下内容:

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

背景:

我有一个使用 JS、Scala、sbt-revolver 的 Web 应用程序。有些资源支持热重载(但仍然需要编译!),有些则不支持。 IE。如果 *.js 文件发生变化,我想调用 compileJs 任务。如果 .scala 文件发生变化,我想调用 re-start 任务。但是 sbt watch 每个项目只有一组被关注的资源...

【问题讨论】:

    标签: sbt


    【解决方案1】:

    不得不深入研究 SBT 资源并自己实施。 针对奇怪的 SBT 行为有很多变通方法,但它确实有效!

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

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 2021-12-22
      • 2023-03-03
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多