我想执行一个shell命令 - rm -r
一个目录 - 每当我的sbt项目构建时。这将在compile
之前。
推理:有一个永远不会更新的缓存文件。如果我在每次编译之前删除它,它会强制更新。
请告知。
答案 0 :(得分:14)
您可以创建删除文件的任务:
val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file")
val removeCacheSettings = removeCacheTask := {
import sys.process._
Seq("rm", "/path/to/file") !
}
然后要求在编译之前运行任务,方法是将这些设置添加到项目中:
Project(...).settings(
removeCacheSettings,
compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask)
)
来源:https://groups.google.com/forum/#!topic/play-framework/4DMWSTNM4kQ
在build.sbt
中,它看起来像这样:
lazy val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file")
removeCacheTask := {
import sys.process._
Seq("rm", "/path/to/file")!
}
compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask)
答案 1 :(得分:6)
@LimbSoup answer很好,但需要考虑一些改进。
执行rm
的命令可能在其他非rm
操作系统(如Windows)上不可用,因此使用sbt.IO.delete
方法更安全。
由于它是关于删除文件,因此clean
任务依赖于def doClean(clean: Seq[File], preserve: Seq[File]): Unit
方法(来自sbt.Defaults
)并且通过适当的更改也可以提供一些帮助。我认为这需要一个新的配置。
有关自定义clean
任务的一些指导,请参阅How to exclude files in a custom clean task?。