[英]Flyway Gradle plugin - Circular dependency
我有一个项目,使用gradle,flyway gradle插件,mybatis生成器和postgres。 在我的build.gradle中,我有:
compileJava.dependsOn('myBatisGenerator')
我想在myBatisGenerator运行之前运行flywayMigrate任务。 所以我做了以下事情:
myBatisGenerator.dependsOn('flywayMigrate')
当我尝试使用gradle测试运行构建时,我收到以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Circular dependency between the following tasks:
:classes
+--- :compileGroovy
| \--- :compileJava
| \--- :myBatisGenerator
| \--- :flywayMigrate
| \--- :testClasses
| +--- :compileTestGroovy
| | +--- :classes (*)
| | \--- :compileTestJava
| | \--- :classes (*)
| \--- :compileTestJava (*)
\--- :compileJava (*)
(*) - details omitted (listed previously)
我不确定为什么要从flywayMigrate插件中调用compileTestJava。 任何想法如何解决这个问题,并仍然在mybatis生成器之前运行flyway插件?
我看了一下flyway gradle插件代码( https://github.com/flyway/flyway/tree/master/flyway-gradle-plugin ),我的猜测是,flyway任务依赖于编译任务以便支持使用flyway Java api编写的迁移。
flyway插件似乎假设如果项目是一个java项目,那么你正在使用Java api。
在各行之间阅读,似乎flyway希望您为迁移创建一个单独的gradle子项目。
因此,将迁移移至名为“迁移”的子项目。 那你可以做
myBatisGenerator.dependsOn(':migrations:flywayMigrate')
和':migrations:flywayMigrate'将仅依赖于':migrations:compileTestJava'而不是你的主':compileTestJava'(即使那时只有'migrations'是一个java项目)
替代解决方法: https : //github.com/flyway/flyway/issues/775
project.afterEvaluate {
flywayClean.dependsOn -= testClasses
flywayMigrate.dependsOn = [processResources, processTestResources]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.