如何从 Flyway 中的同一文件夹读取 Java 和 SQL 迁移

How to read Java and SQL migration from same folder in Flyway

我正在使用 Java API 使用 Flyway 进行 Java 和 SQL 迁移。我没有更改迁移文件夹的默认位置,即我使用 "db/migration"。

但是,为了清楚起见,我希望将 SQL 和 Java 迁移都放在同一个文件夹中(Flyway 从 [=19 读取 Java 迁移=] 文件夹和来自 src/main/resources/db/migration 的 SQL 个)。我试图将 SQL 脚本复制到 java 文件夹,但 flyway 忽略了它们。

这可能吗?

Flyway reads the Java migrations from src/main/java/db/migration

不完全是。默认情况下,Flyway 从类路径中读取 Java 迁移(和 SQL 迁移)。 src/main/java 包含源文件,而不是 类。

您的构建工具,Gradle / Maven 等,将在 src/main/java 中查找 .java 源文件,编译它们并将 类 放入某个输出目录,例如build/classes/java/maintarget/classes 等。输出目录的内容将位于类路径中,因此对 Flyway 可见。

为了将 .sql 文件从源目录获取到类路径,需要告知您的构建工具复制它们。

例如,在 Gradle 中,这样的事情可能有效(未测试 - 请参阅 docs 了解更多信息):

sourceSets {
    main {
        resources {
            srcDir file('src/main/resources')
            include '**/*.sql'
            exclude '**/*.java'
        }
    }
}