我想rm -r在我的sbt项目构建时执行一个shell命令 - 一个目录.这将是以前compile.
推理:有一个永远不会更新的缓存文件.如果我在每次编译之前删除它,它会强制更新.
请指教.
Mic*_*jac 14
您可以创建删除文件的任务:
val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file")
val removeCacheSettings = removeCacheTask := {
import sys.process._
Seq("rm", "/path/to/file") !
}
Run Code Online (Sandbox Code Playgroud)
然后要求在编译之前运行任务,方法是将这些设置添加到项目中:
Project(...).settings(
removeCacheSettings,
compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask)
)
Run Code Online (Sandbox Code Playgroud)
资料来源:https://groups.google.com/forum/#!topic/play- frame/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)
Run Code Online (Sandbox Code Playgroud)
@LimbSoup答案很好,但需要考虑一些改进.
执行命令rm可能在其他非rm操作系统(如Windows)上不可用,因此使用sbt.IO.delete方法更安全.
因为它是关于删除文件,所以clean任务依赖于def doClean(clean: Seq[File], preserve: Seq[File]): Unit方法(from sbt.Defaults)并且通过适当的更改它也可以提供一些帮助.不过,我认为这需要一个新的配置.
请参见如何排除自定义清理任务中的文件?有关自定义clean任务的一些指导.