升级到 tomcat 8 后,Flyway 无法扫描 class 路径中的 sql 迁移

Flyway unable to scan for sql migrations in class path after upgrade to tomcat 8

我们的应用程序在 flyway 3.0 和 tomcat 7 上运行良好。我们在 class 路径中使用基于 sql 的迁移。

最近我们正在尝试升级我们的应用程序以使用 tomcat8。这样做之后,flyway 无法在我们的 class 路径中找到 sql 迁移。我们一直在使用 WAR 部署和 unpackWAR = false。仅供参考,使用 unpackWAR = true,问题不再重现。

我尝试调试 flyway 代码库,并试图找出升级到 tomcat 8 之前和升级到 tomcat 8 之后的区别。一个关键区别是我发现在 ClassPathScanner.getLocationUrlsForPath() 中,以前我们用来查找前缀为 file: protocol 的 WAR 文件的位置,但是现在使用 tomcat 8,我们正在查找 WAR 文件的位置WAR 文件前缀为 jar: protocol.这看起来问题不大。但是,这会导致 JarFileClassPathLocationScanner.findResourceNamesFromJarFile() 中的代码被执行。在此方法中,jar 元素条目名称类似于 "WEB-INF/classes/our_path/schema/V1.0.sql" 等,但指定的位置仅为 our_path/schema/V1.0.sql。既然有条件,

if(entryName.startsWith(位置)) {

我们的架构迁移未被提取。

有什么想法吗?这听起来像是一个错误吗?

这应该开箱即用。请在问题跟踪器中提交一个问题,其中包含重现的步骤(或者更好的是一个小的 repro repo)。