【问题标题】:How do you delete a directory before running in ScalaTest/sbt/Intellij?在 ScalaTest/sbt/Intellij 中运行之前如何删除目录?
【发布时间】:2020-10-30 06:12:09
【问题描述】:

我目前正在为我的 Scala 2.11.8 项目使用 ScalaTest 3.0.1,并使用 sbt 0.13.18 作为构建工具。 IDE 是 Intellij。

该项目是一个 Spark 项目,我使用位于 root/temp/ 的临时目录作为检查点和仓库。当我多次运行测试时,检查点不断增加,最终达到非常大的大小。我想在测试运行后保留检查点,以便它们可以用于验证,但我想在下次运行之前删除它们。

您如何在 Intellij 中使用 sbt 和 ScalaTest 完成此任务?

我一直在考虑在build.sbt 中使用我的临时目录设置sbt clean,但我似乎无法删除该目录,并且阅读文档提示它只会删除 sbt 拥有的文件创建,所以我放弃了这个想法。

我目前正在考虑将我的 ScalaTest 设置为有一个 BeforeAll 事件,该事件将删除目录,但我不确定这是正确的方法,而且我在让它工作时遇到了问题。

【问题讨论】:

  • "IDE 是 Intellij。"怎么样?
  • 包括它以防万一,因为我注意到 Intellij 有时会奇怪地对待 sbt。我也刚刚意识到我已经关闭了版本,所以我会添加它们。

标签: scala sbt scalatest


【解决方案1】:

基于https://stackoverflow.com/a/48659771/5205022clean可以包含temp目录

cleanFiles += baseDirectory.value / "temp"

另一种选择是创建清理temp 的自定义任务,例如使用better-files

lazy val deleteTestTemp = taskKey[Unit]("Delete test temp directory")
deleteTestTemp := {
  import better.files._
  val temp = (baseDirectory.value / "temp").toScala
  if (temp.exists) temp.delete()
}

project/plugins.sbt 包含在哪里

libraryDependencies += "com.github.pathikrit" %% "better-files" % "3.9.1"

我们可以像这样清理然后测试

deleteTestTemp;test

【讨论】:

  • 第一种方法与我之前的代码完全相同,但不起作用。当我inspect clean-files 时,我确实看到了列出的目录,但是当我使用last 命令时,我没有看到任何详细信息。它只是快速运行并且不会删除任何文件。我正在尝试使第二种方法起作用,但似乎无法导入 better.files._ 即使我有模块。
  • @WarSame 关于第一种方法,如果您执行show cleanFiles,它会列出temp 目录吗?关于第二种方法,请确保在 project/plugins.sbtproject/build.sbt 下添加依赖项,而不是根项目的 builld.sbt,因为它需要是元项目的依赖项,而不是按照 @ 正确的项目987654323@
  • 如果我执行show clean-filesshow cleanFiles 我确实看到temp 目录列在两者中,尽管它仍然没有被删除。如果我把libraryDependency 你在我的project/plugins.sbt Intellij 中提到的Expression type Def.Setting[Seq[ModuleID]] must conform to DslEntry in sbt file 给出了一个提示,Expression type Def.Setting[Seq[ModuleID]] must conform to DslEntry in sbt file 并且无法解决依赖关系。我试过addSbtPlugin 也有同样的问题。我似乎无法让它真正找到这种依赖关系。
猜你喜欢
  • 2016-06-02
  • 1970-01-01
  • 2017-01-27
  • 2011-05-29
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2017-10-17
  • 2019-06-09
相关资源
最近更新 更多