Плагин Flyway Gradle - Круговая зависимость
У меня есть проект, который использует плагин gradle, flydle gradle, генератор mybatis и postgres. В моем build.gradle у меня есть:
compileJava.dependsOn('myBatisGenerator')
Я хотел бы запустить задачу flywayMigrate до запуска myBatisGenerator. Итак, я сделал следующее:
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)
Я не уверен, почему compileTestJava вызывается из плагина flywayMigrate. Любые идеи, как обойти эту проблему и по-прежнему запускать плагин flyway перед генератором mybatis?
2 ответа
Я взглянул на код подключаемого модуля 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]
}