我有这些gradle这个任务:
- startTestDatabaseContainer
:建立与数据库
启动泊坞窗容器 - removeTestDatabaseContainer
:停止并删除泊坞窗容器
- flywayValidate
:从org.flywaydb.flyway
任务是验证我的移民文件我应该如何构建这些gradle任务依赖关系?
我希望按顺序执行这三项任务。阅读this使我这个解决方案:
flywayValidate.dependsOn startTestDatabaseContainer
flywayValidate.finalizedBy removeTestDatabaseContainer
该工程确定,但我不能没有startTestDatabaseContainer
和removeTestDatabaseContainer
也被调用运行在命令行gradle flywayValidate
。我希望能够在没有这种情况下运行flywayValidate
。
当我无法在gradle中定义依赖关系时,我能做些什么来完成此任务?
我第一次尝试很干脆:
task validateMigration {
dependsOn startTestDatabaseContainer
dependsOn flywayValidate
finalizedBy removeTestDatabaseContainer
}
但失败,因为flywayValidate
可以startTestDatabaseContainer
之前运行。
编辑:我在Opal的解决方案这里设置了示范基地:github.com/stianlagstad/flyway-migration-error-causes-final-gradle-task-to-not-execute。克隆它并运行gradle validateMigration
。迁移将失败,最终的gradle任务将不会运行(并且docker ps
将显示容器仍在运行)。如果你修复了迁移文件,那么一切都按预期工作。我相信我误解了一些东西。任何指针都会有帮助!
谢谢!我遇到了另一个问题:当迁移失败时,removeTestDatabaseContainer任务没有运行(我通过添加一个doLast并使用println +看到docker容器仍在运行来证实这一点)。如果我在'validateMigration'任务中移除了两行'flywayValidate',那么'removeTestDatabaseContainer'已成功运行。你有什么建议吗? – L42
@ L42,见编辑答案。 – Opal
再次感谢您。但是,它看起来并不像调用removeTestDatabaseContainer。我将编辑我的原始问题,向您展示编辑中代码的输出结果。 – L42