防止在SBT中循环重新编译

时间:2015-08-10 13:16:24

标签: scala sbt

我正在使用SBT来构建我的scala项目。在编译起诉fastOptJS的子模块之后,我需要将编译后的文件推送到同一项目中的另一个模块,我设计了一个自定义命令fastOptCopy来执行此操作。

lazy val copyjs = TaskKey[Unit]("copyjs", "Copy javascript files to public directory")
copyjs := {
  val outDir = baseDirectory.value / "public/js"
  val inDir = baseDirectory.value / "js/target/scala-2.11"
  val files = Seq("js-fastopt.js", "js-fastopt.js.map", "js-jsdeps.js") map { p => (inDir / p, outDir / p) }
  IO.copy(files, true)
}

addCommandAlias("fastOptCopy", ";fastOptJS;copyjs")

但是,当我进入sbt控制台并输入

~fastOptCopy

它在无限循环中不断编译,复制,编译,复制......我想这是因为我正在复制文件,它认为源已经改变并重新编译汇编。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:5)

您可以在sbt配置

中从watchSources中排除指定的文件

http://www.scala-sbt.org/0.13/docs/Triggered-Execution.html

  

watchSources定义受监控的单个项目的文件   为了改变。默认情况下,项目监视资源和Scala和   Java来源。

这是一个类似的问题: How to not watch a file for changes in Play Framework

watchSources := watchSources.value.filter { _.getName != "BuildInfo.scala" }