Liquibase 3.5.X cannot find files for includeAll with relative path

We are using liquibase 3.4.2 and want to upgrade it to 3.5.3, but all my attempts were unsuccessful since liquibase does not find any files included with includeAll . I tested liquibase 3.5.0, 3.5.1 and 3.5.3 (I missed 3.5.2 because of this blog post ).

My set of changes looks like this:

 <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> 

My directory structure (inside the jar, which is included in the war) looks like this:

  • /some/dir/changeset.xml (code above)
  • /some/dir/relative/dir1/another-changeset.xml
  • /some/dir/relative/dir2/another-changeset-1.xml
  • /some/dir/relative/dir2/another-changeset-2.xml

I already debugged through liquibase and stuck in ClassLoaderResourceAccessor.java:108 :

 if (entry.getName().startsWith(path)) { 

In my case, entry.getName() returns some in the first loop, then some/dir and so on to some/dir/relative/dir1/another-changeset-1.xml , some/dir/relative/dir2/another-changeset-1.xml and some/dir/relative/dir2/another-changeset-2.xml some/dir/relative/dir2/another-changeset-1.xml some/dir/relative/dir2/another-changeset-2.xml . But the condition is always false, because path contains something like jar:file: /C: /path/to/maven/project/war/target/example.war-1.0-SNAPSHOT/WEB-INF/lib/changesets-1.0-SNAPSHOT.jar!/relative/dir1/ or jar:file: /C: /path/to/maven/project/war/target/example.war-1.0-SNAPSHOT/WEB-INF/lib/changesets-1.0-SNAPSHOT.jar!/relative/dir2/

Is this really a bug in liquibase since 3.5.0? This works fine if I downgrade to version 2.2.2. This also works if I use include instead of includeAll but in my real application I have a lot more change sets and I don’t want to list them all manually.

I found some information on this, but none of them help me. To complete the picture:

+11
java database liquibase
source share
1 answer

Try this,

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

Start the path with the file: / and use the absolute path. This is not ideal, but I was able to get liquibase-maven-plugin 3.6.3 to download the changeset.

0
source share

All Articles