为何我用Java实现的迁移类被过滤?附调试信息
以下是针对你的V18__Move_TE_Highlight_Flds.class被过滤的常见排查点:
检查BaseJavaMigration的包路径
确认你的类继承的是Flyway官方的org.flywaydb.core.api.migration.BaseJavaMigration,而非其他框架的同名类。如果导包错误,Flyway无法识别这是一个合法的迁移类。验证类的实际访问权限
虽然代码声明为public class,但要确认编译后的class文件确实是public修饰。比如某些IDE编译设置或构建工具(如Maven/Gradle)的配置可能意外改变了类的访问权限。确认类路径与扫描路径匹配
检查编译后的class文件是否确实位于classpath:db/migrations路径下。比如Maven项目中,源码需放在src/main/java/db/migrations下,编译后才会进入target/classes/db/migrations;若误放在src/main/resources下,会被当作资源文件而非类文件处理。检查Flyway的过滤配置
查看是否配置了flyway.ignoreMigrationPatterns属性,该属性可能通过通配符匹配到了你的迁移类。同时确认flyway.sources是否仅包含db/migrations,未排除该路径。核对迁移类命名规则
虽然你的命名看起来符合V<版本号>__<描述>.class格式,但需确保:- 版本号是纯数字(你的18符合要求)
- 版本号与描述之间是两个下划线(你这里是
V18__...,正确) - 描述中没有Flyway不允许的特殊字符(如空格、@等,你的下划线是允许的)
排查Flyway版本兼容性
若使用的Flyway版本较旧,可能对Java迁移类的继承要求不同。比如部分旧版本要求直接实现Migration接口而非继承BaseJavaMigration,升级到对应版本的Flyway即可解决。
内容的提问来源于stack exchange,提问作者user3259551

