我有一个SBT构建,其中测试将临时文件创建到名为temp的目录中。当我调用clean任务时,如何告诉SBT删除此文件夹?
答案 0 :(得分:13)
在包含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
您可以看到,如果它是任务或设置,类型,描述以及用作输入的任务/设置,则会显示此信息。
答案 1 :(得分:6)
Mark Harrah's answer现已过时。
这是适用于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
和其他基于集合的键现在模仿(可变)集合,因此您可以通过+=
运算符向其附加值。如果您有多个值,请使用++=
代替List
或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
答案 2 :(得分:1)
一种可能性就是你的测试会自行清理,就像agilesteel所说的那样。
另一种可能性是您创建了一个依赖于测试任务的自定义清理任务。 有关如何自定义现有任务的更多信息(例如您的案例中的测试),请参阅我的答案:add dependency to existing rule。
答案 3 :(得分:0)
以前建议的解决方案现已弃用。贝娄是适合我的代码。
cleanFiles += new java.io.File(path)