Подтвердить что ты не робот

Liquibase 3.5.X не может найти файлы для includeAll с относительным путем

Мы используем 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 но в моем реальном приложении у меня намного больше наборов изменений, и я не хочу перечислять их все вручную.

Я нашел некоторую информацию по этому вопросу, но никто из них не помогает мне. Для полноты картины:

4b9b3361

Ответ 1

Попробуй это,

<includeAll path="file: /absolute/path/to/changeset/folder" relativeToChangelogFile="false"/>

Начните путь с файла:/и используйте абсолютный путь. Это не идеально, но я смог получить liquibase-maven-plugin 3.6.3 для загрузки набора изменений.