Я выкопал в flyway
и flyway-maven-plugin
колдовства. Я обнаружил, что путь от тега местоположения classpath ищется ClassRealm
в классе. И существует две классовые линии: ClassRealm[plugin>org.flywaydb:flyway-maven-plugin:5.0.0, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@1f89ab83]
. ClassRealm
- это загрузчик классов, который используется в Maven.
Я выполнил classLoader.getResources('/db/migration')
и обнаружил, что он возвращает 2 пути (target/classes/db/migration
и target/test-classes/db/migration
) для версии плагина mave 4.2.0
, но возвращает только 1 путь (target/classes/db/migration) for version
5.0.0`.
Также я обнаружил, что в репозитории flyway-maven-plugin была фиксация для использования maven 3 вместо 2 в maven-plugin
версии 4.2.0 и 5.0.0.
Я не нашел точной причины, но, подытоживая все это, я предполагаю, что произошли некоторые изменения в плагине maven (я полагаю, какая-то версия библиотеки ядра maven), в результате чего путь поиска в classpath был изменен.
Я пробовал несколько вариантов возврата старого поведения, но все они не так хороши. Это работа:
- Оставайтесь на 4.2. 0
maven-plugin
версия (у меня есть домашний проект, в котором я указал flyway 5.0.0 в <dependencies>
и использую maven-plugin
4.2.0, и он работает правильно для вас); - Укажите путь к тесту. миграция через
<location>filesystem:target/test-classes/db/migration</location>
или <location>filesystem:src/test/resources/db/migration</location>
Надеюсь, это вам поможет.
PS Кстати, почему вы используете миграцию в тестовой папке для генерации классов с помощью jooq? Это выглядит очень странно для меня. Вы генерируете классы из одной модели БД, но в PROD у вас будет другая модель БД (поскольку используются миграции только под main
). Может стоит подумать и использовать только миграцию в папку main
? Если у вас есть некоторые исключения во время генерации jooq, попробуйте исправить это без test
миграций.