10

我有一个 SBT 版本,其中测试将临时文件创建到一个名为 temp 的目录中。当我调用 clean 任务时,如何告诉 SBT 删除此文件夹?

4

4 回答 4

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

您可以看到它向您显示它是否是任务或设置、类型、描述以及用作输入的任务/设置。

于 2012-05-07T23:38:00.217 回答
11

Mark Harrah 的回答现在已经过时了。

这是一个适用于 sbt 0.13 及更高版本的版本,也是唯一适用于 sbt 1.0 及更高版本的两个版本。

更新了键附加语法。

在 sbt 0.13 之前,你有<+=添加附加值的语法,你可以apply在键上。

在 0.13 中,引入了一种新的、更统一的语法,部分称为valueDSL。从 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语法上也有细微差别。

  1. hyphen-named-commands已在 0.13 中弃用并在 1.0 中删除。它们被替换为lowerCamelCaseCommands,因此在控制台中与在您的build.sbt.
  2. 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
    
于 2018-02-07T09:08:25.663 回答
1

一种可能性是您的测试会自行清理,就像敏捷钢指出的那样。

另一种可能性是您创建一个取决于测试任务的自定义清理任务。有关如何自定义现有任务(如您的案例中的测试)的更多信息,请参阅我的答案:添加对现有规则的依赖

于 2012-05-07T08:41:34.853 回答
1

以前建议的解决方案现在已弃用。贝娄是对我有用的代码。

cleanFiles += new java.io.File(path)
于 2017-12-18T11:53:37.663 回答