JavaEE无框架项目集成Flyway时无法找到迁移文件路径求助
问题情况
无框架JavaEE应用集成Flyway,pom.xml配置完成、数据库连接正常,但出现警告:
09-Aug-2022 16:19:22.403 WARNING [RMI TCP Connection(3)-127.0.0.1] com.googlecode.flyway.core.migration.sql.SqlMigrationResolver.resolveMigrations Unable to find path for sql migrations: db/migration
当前pom.xml相关配置:
依赖部分
<dependency> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-core</artifactId> <version>1.5</version> </dependency>
Maven插件部分
<plugin> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>1.5</version> <configuration> <user>user228</user> <password>user228</password> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/javaee_task_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_general_ci&characterSetResults=UTF-8</url> </configuration> </plugin>
解决步骤
1. 补全默认迁移目录
Flyway默认会从类路径下的db/migration目录读取SQL迁移脚本,你需要在项目的src/main/resources目录下手动创建db/migration文件夹,然后把符合命名规范的迁移脚本(比如V1__初始化_todo表.sql)放进去。
2. 显式指定迁移路径(可选)
如果你的迁移文件放在其他位置,或者默认路径识别有问题,可以在插件配置里明确指定路径:
在插件的<configuration>节点中添加:
<locations> <location>filesystem:src/main/resources/db/migration</location> </locations>
如果是代码里初始化Flyway,也可以调用flyway.setLocations("filesystem:src/main/resources/db/migration")来指定。
3. 升级Flyway版本(强烈推荐)
你用的Flyway 1.5是2013年的老版本,bug多、兼容性差,建议直接升级到最新稳定版(比如10.x系列)。注意新版本的groupId已经改成org.flywaydb,配置要调整:
升级后的依赖
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>10.15.0</version> <!-- 替换为最新版 --> </dependency>
升级后的插件
<plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>10.15.0</version> <!-- 和依赖版本保持一致 --> <configuration> <user>user228</user> <password>user228</password> <driver>com.mysql.cj.jdbc.Driver</driver> <!-- MySQL 8+用这个驱动类 --> <url>jdbc:mysql://localhost:3306/javaee_task_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_general_ci&characterSetResults=UTF-8&serverTimezone=UTC</url> <!-- 加时区参数避免警告 --> </configuration> </plugin>
4. 检查Maven资源目录配置
确保src/main/resources是Maven的默认资源目录,这个目录下的文件会被正确打包到类路径里。如果有自定义资源配置,要确认db/migration所在目录被包含在内。
内容的提问来源于stack exchange,提问作者Matvey Androsyuk

