我有一个使用gradle、flyway gradle plugin、mybatis generator和postgres的项目。在我的 build.gradle 中,我有:
compileJava.dependsOn('myBatisGenerator')
我想在 myBatisGenerator 运行之前运行 flywayMigrate 任务。所以我做了以下事情:
myBatisGenerator.dependsOn('flywayMigrate')
当我尝试使用 gradle test 运行构建时,出现以下错误:
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。有什么想法可以解决这个问题并让 flyway 插件在 mybatis 生成器之前运行吗?
最佳答案
我查看了 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 项目时)
关于gradle - Flyway Gradle 插件 - 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129694/