在SBT构建中添加其他目录以清除任务

时间:2012-05-06 15:09:43

标签: scala sbt

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

4 个答案:

答案 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及更高版本中工作的两个版本中唯一的版本。

更新了key appending语法。

在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和其他基于集合的键现在模仿(可变)集合,因此您可以通过+=运算符向其附加值。如果您有多个值,请使用++=代替ListSeq

.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
    

答案 2 :(得分:1)

一种可能性就是你的测试会自行清理,就像agilesteel所说的那样。

另一种可能性是您创建了一个依赖于测试任务的自定义清理任务。 有关如何自定义现有任务的更多信息(例如您的案例中的测试),请参阅我的答案:add dependency to existing rule

答案 3 :(得分:0)

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

cleanFiles += new java.io.File(path)