使用SBT如何在运行测试之前从插件中对任务进行排序

时间:2015-06-11 18:15:33

标签: sbt flyway

如何在运行测试之前运行来自插件(如flyway)的顺序任务,例如,如果我想运行: flywayClean然后flywayMigrate然后integrationTests,我该怎么做?

问题在于sbt并不真正支持像db这样的副作用。

我在这里查看了测序任务的示例: http://eed3si9n.com/sequencing-tasks-with-sbt-sequential

我已经尝试过这些,我可以按照基本示例进行操作,但我无法弄清楚如何从flyway这样的插件中运行任务。

似乎问题的一部分是flywayCleanflywayMigrate都属于TaskKey[Unit]类型,其中sbt-sequential示例使用Def.Setting[Task[Unit]]

sbt非常复杂,我无法弄清楚如何解决与给定Task相关联的TaskKey,然后将其转换为Setting[Task[Unit]]

2 个答案:

答案 0 :(得分:2)

我设置我的sbt构建版本以执行flywayClean,然后在运行测试之前执行flywayMigrate

executeTests in Test := {
  (executeTests in Test).dependsOn(flywayMigrate.dependsOn(flywayClean)).value
}

答案 1 :(得分:1)

以下是如何使用顺序执行许多其他任务的任务。这是你想要做的吗?如果任务来自插件,则需要将其纳入范围。如果它来自自动插件,则几乎所有任务都应该在范围内,而无需您明确地导入它们。

fun null [] = true 
  | null _ = false