繁体   English   中英

Flyway Gradle插件 - 循环依赖

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM