我有一个 SBT 版本,其中测试将临时文件创建到一个名为 temp 的目录中。当我调用 clean 任务时,如何告诉 SBT 删除此文件夹?
4 回答
temp
在包含目录的项目中使用此设置:
cleanFiles <+= baseDirectory { base => base / "temp" }
这会将“temp”目录添加到文件列表中,以便在clean
运行时递归删除。
表示“根据<
其他任务/设置进行配置”,+
表示附加到当前文件列表,并且baseDirectory
是提供项目基本目录的设置。
您可以查看如何clean
使用该inspect
命令进行配置,在Inspecting Settings页面上有更详细的说明。已编辑的 sbt 会话显示了这种情况下的用法:
> inspect clean
Task: Unit
Description:
Deletes files produced by the build, such as generated sources, compiled classes, and task caches.
Dependencies:
clean-files
clean-keep-files
> inspect clean-files
Setting: scala.collection.Seq[java.io.File] = List(<project>/lib_managed, <project>/target, <project>/temp)
Description:
The files to recursively delete during a clean.
Dependencies:
managed-directory
target
base-directory
您可以看到它向您显示它是否是任务或设置、类型、描述以及用作输入的任务/设置。
Mark Harrah 的回答现在已经过时了。
这是一个适用于 sbt 0.13 及更高版本的版本,也是唯一适用于 sbt 1.0 及更高版本的两个版本。
更新了键附加语法。
在 sbt 0.13 之前,你有<+=
添加附加值的语法,你可以apply
在键上。
在 0.13 中,引入了一种新的、更统一的语法,部分称为value
DSL。从 1.0 开始,旧语法已被删除。
// From the old, apply-based version...
cleanFiles <+= baseDirectory { base => base / "temp" }
// ...we change to .value and collection-like syntax
cleanFiles += baseDirectory.value / "temp"
cleanFiles
和其他基于集合的键现在模仿(可变)集合,因此您可以通过+=
运算符将值附加到它。如果您有多个值,请使用++=
orList
代替Seq
。
.value
写的时候不强制评价baseDirectory
,但是每次cleanFiles
都是计算出来的,所以每个子项目都不一样。
更新了检查和命令语法
inspect clean-files
语法上也有细微差别。
hyphen-named-commands
已在 0.13 中弃用并在 1.0 中删除。它们被替换为lowerCamelCaseCommands
,因此在控制台中与在您的build.sbt
.inspect
不再显示您的密钥的值(我找不到相应的版本信息)。相反,您必须使用show
.sbt:root-_t> show cleanFiles [info] * C:\Users\Adowrath\_T\target\scala-2.12 [info] * C:\Users\Adowrath\_T\target\streams [info] * C:\Users\Adowrath\_T\temp [success] Total time: 0 s, completed 06.02.2018, 10:28:00
一种可能性是您的测试会自行清理,就像敏捷钢指出的那样。
另一种可能性是您创建一个取决于测试任务的自定义清理任务。有关如何自定义现有任务(如您的案例中的测试)的更多信息,请参阅我的答案:添加对现有规则的依赖。
以前建议的解决方案现在已弃用。贝娄是对我有用的代码。
cleanFiles += new java.io.File(path)