Мы используем 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