Мы используем liquibase 3.4.2 и хотим обновить его до 3.5.3, но все мои попытки не увенчались успехом, поскольку liquibase не находит ни одного файла, включенного с помощью includeAll. Я тестировал liquibase 3.5.0, 3.5.1 и 3.5.3 (я пропустил 3.5.2 из-за этого сообщения в блоге).
Мой набор изменений выглядит так:
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<includeAll path="relative/dir1" relativeToChangelogFile="true" errorIfMissingOrEmpty="true"/>
<includeAll path="relative/dir2" relativeToChangelogFile="true" errorIfMissingOrEmpty="true"/>
</databaseChangeLog>
Моя структура каталогов (внутри фляги, которая включена в войну) выглядит так:
-
/some/dir/changeset.xml(код выше) -
/some/dir/relative/dir1/another-changeset.xml -
/some/dir/relative/dir2/another-changeset-1.xml -
/some/dir/relative/dir2/another-changeset-2.xml
Я уже отладил через liquibase и застрял в ClassLoaderResourceAccessor.java:108:
if (entry.getName().startsWith(path)) {
В моем случае entry.getName() возвращает some в первом цикле, затем some/dir и так далее до some/dir/relative/dir1/another-changeset-1.xml, some/dir/relative/dir2/another-changeset-1.xml и some/dir/relative/dir2/another-changeset-2.xml some/dir/relative/dir2/another-changeset-1.xml some/dir/relative/dir2/another-changeset-2.xml. Но условие всегда ложно, потому что path содержит что-то вроде jar:file: /C: /path/to/maven/project/war/target/example.war-1.0-SNAPSHOT/WEB-INF/lib/changesets-1.0-SNAPSHOT.jar!/relative/dir1/ или jar:file: /C: /path/to/maven/project/war/target/example.war-1.0-SNAPSHOT/WEB-INF/lib/changesets-1.0-SNAPSHOT.jar!/relative/dir2/
Это действительно ошибка в liquibase начиная с 3.5.0? Это работает отлично, если я понижаю до версии 2.2.2. Это работает также, если я использую include вместо includeAll но в моем реальном приложении у меня намного больше наборов изменений, и я не хочу перечислять их все вручную.
Я нашел некоторую информацию по этому вопросу, но никто из них не помогает мне. Для полноты картины:
- Liquibase-JIRA: https://liquibase.jira.com/browse/CORE-2851, https://liquibase.jira.com/browse/CORE-2863, https://liquibase.jira.com/browse/CORE- 2898, https://liquibase.jira.com/browse/CORE-2974
- SO: тег Liquibase includeAll игнорируется, includeAll path = "" не работает в 3.5.3 с использованием метода java -jar