Плагин 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]
}
Другие вопросы по тегам