如何在运行测试之前运行来自插件(如flyway)的顺序任务,例如,如果我想运行:
flywayClean
然后flywayMigrate
然后integrationTests
,我该怎么做?
问题在于sbt并不真正支持像db这样的副作用。
我在这里查看了测序任务的示例: http://eed3si9n.com/sequencing-tasks-with-sbt-sequential
我已经尝试过这些,我可以按照基本示例进行操作,但我无法弄清楚如何从flyway
这样的插件中运行任务。
似乎问题的一部分是flywayClean
和flywayMigrate
都属于TaskKey[Unit]
类型,其中sbt-sequential示例使用Def.Setting[Task[Unit]]
。
sbt非常复杂,我无法弄清楚如何解决与给定Task
相关联的TaskKey
,然后将其转换为Setting[Task[Unit]]
。
答案 0 :(得分:2)
我设置我的sbt构建版本以执行flywayClean
,然后在运行测试之前执行flywayMigrate
:
executeTests in Test := {
(executeTests in Test).dependsOn(flywayMigrate.dependsOn(flywayClean)).value
}
答案 1 :(得分:1)
以下是如何使用顺序执行许多其他任务的任务。这是你想要做的吗?如果任务来自插件,则需要将其纳入范围。如果它来自自动插件,则几乎所有任务都应该在范围内,而无需您明确地导入它们。
fun null [] = true
| null _ = false