gradle - Flyway Gradle 插件 - 循环依赖

标签 gradle circular-dependency flyway mybatis-generator

我有一个使用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/

相关文章:

python - 循环依赖导致 ImportError : cannot import name

maven-2 - 如何将 Gradle 项目发布到范围为 'optional' 和 'provided' 的 Maven 存储库?

jenkins - 在 Jenkins 中使用Gradle构建Gcloud测试用例失败

java - HSQLDB在Spring项目中的持久性

android - 具有不同源集的Android构建类型

c++ - 多重循环依赖c++

Delphi:如何将类移出单元;避免循环引用

gradle - 如何向 gradle 任务命令行参数提供 Flyway 密码?

java - 如何测试飞路迁移?

sql - 如何为飞行路线迁移添加评论