Наше приложение отлично работает с flyway 3.0 и tomcat 7. Мы используем миграции на основе sql в пути к классам.
Недавно мы пытаемся обновить наше приложение для использования tomcat 8. После этого flyway не смог найти миграции sql в нашем пути к классам. Мы использовали развертывание WAR с unpackWAR = false. Только для информации, используя unpackWAR = true, проблема больше не воспроизводится.
Я попытался отлаживать кодовую базу flyway и пытался выяснить различия до обновления до tomcat 8 и после обновления до tomcat 8. Одно ключевое отличие, которое я обнаружил, заключается в том, что внутри ClassPathScanner.getLocationUrlsForPath(), ранее мы используется для поиска местоположения файла WAR с префиксом file: protocol, однако теперь с tomcat 8 мы находим местоположение файла WAR с префиксом jar: protocol. Это не кажется очень проблематичным. Однако это приводит к выполнению кода внутри JarFileClassPathLocationScanner.findResourceNamesFromJarFile(). Внутри этого метода имена элементов jar выглядят примерно так: «WEB-INF/classes/our_path/schema/V1.0.sql» и т. д., однако указанное местоположение — это только our_path/schema/V1.0.sql. Поскольку есть условие,
если (entryName.startsWith (местоположение)) {
наши миграции схем не принимаются.
есть идеи? Это похоже на ошибку?