【问题标题】:Add additional directory to clean task in SBT build在 SBT 构建中添加其他目录以清理任务
【发布时间】:2012-05-15 08:12:27
【问题描述】:

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

【问题讨论】:

  • 你的测试不应该自己清理吗?
  • 事实上,在正常情况下,测试会清理临时文件。但在这种情况下,我需要临时文件来查看某事何时失败。我只是想将临时目录添加到清理任务删除的目录中。
  • 这与clean@agilesteel 的语义相同 - 清理所有内容,即使前一步未能这样做或在到达之前停止。不是吗?

标签: scala sbt


【解决方案1】:

在包含temp 目录的项目中使用此设置:

cleanFiles <+= baseDirectory { base => base / "temp" }

这会将“temp”目录添加到文件列表中,以便在clean 运行时递归删除。

&lt; 表示“根据其他任务/设置进行配置”,+ 表示附加到当前文件列表,baseDirectory 是提供项目基本目录的设置。

您可以查看如何使用inspect 命令配置clean,在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

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

【讨论】:

  • 感谢您的详细解答。我再次了解了有关 SBT 的更多信息。现在就像一个魅力。
  • 如何一次添加多个目录?谢谢!
【解决方案2】:

Mark Harrah's answer 现已过时。

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

更新了key appending 语法。

在 sbt 0.13 之前,您可以使用 &lt;+= 语法来添加其他值,并且可以在键上使用 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
    

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      之前建议的解决方案现已弃用。 Bellow 是对我有用的代码。

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

      【讨论】:

        猜你喜欢
        • 2018-05-25
        • 2010-12-08
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 2011-12-04
        • 2013-06-09
        • 2015-07-08
        • 1970-01-01
        相关资源
        最近更新 更多