我正在使用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
它在无限循环中不断编译,复制,编译,复制......我想这是因为我正在复制文件,它认为源已经改变并重新编译汇编。
我该如何防止这种情况?
答案 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" }