Flyway Gradle插件-循环依赖
我有一个使用gradle、flyway gradle插件、mybatis生成器和postgres的项目。在我的build.gradle中,我有:Flyway Gradle插件-循环依赖,gradle,circular-dependency,flyway,mybatis-generator,Gradle,Circular Dependency,Flyway,Mybatis Generator,我有一个使用gradle、flyway gradle插件、mybatis生成器和postgres的项目。在我的build.gradle中,我有: compileJava.dependsOn('myBatisGenerator') 我想在myBatisGenerator运行之前运行flywayMigrate任务。因此,我做了以下工作: myBatisGenerator.dependsOn('flywayMigrate') 当我尝试使用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 generator之前运行flyway插件?我查看了flyway gradle插件代码(),我猜flyway任务依赖于编译任务,以便支持使用flyway Java api编写的迁移 flyway插件似乎假设,如果项目是java项目,那么您使用的是java api 从字里行间看,flyway似乎希望您的迁移有一个单独的gradle子项目 因此,将您的迁移移动到一个名为“迁移”的子项目。那你就可以了
myBatisGenerator.dependsOn(':migrations:flywayMigrate')
和“:migrations:flywayMigrate”将仅取决于“:migrations:compileTestJava”而不是您的主“:compileTestJava”(即使如此,也仅当“migrations”是java项目时)替代解决方法:
或者,您可以使用类似于flywayMigrate.taskDependencies.values-=“testClasses”的方法删除taskDependency
project.afterEvaluate {
flywayClean.dependsOn -= testClasses
flywayMigrate.dependsOn = [processResources, processTestResources]
}