我有這些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