Наборы изменений Liquibase в файлах JAR

В настоящее время я пытаюсь интегрировать Liquibase 3.3.3 в свой проект. Чтобы управлять моей базой данных, я вызываю Liquibase из своего приложения, в то время как наборы изменений находятся в файле JAR с

final Liquibase liquibase = new Liquibase( "db/db_changelog_master.xml",
                                           new ClassLoaderResourceAccessor(),
                                           database );
liquibase.update( new Contexts() );

Этот вызов работает, и основной набор изменений загружается. В основной набор изменений загружаются дополнительные наборы изменений:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                                       http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd
                                       http://www.liquibase.org/xml/ns/dbchangelog-ext
                                       http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
    <include file="classpath:db_changelog_1.0.xml"/>
</databaseChangeLog>

И тут начинаются проблемы, потому что Liquibase не может найти и загрузить наборы изменений. Я также безуспешно пробовал тег «includeAll» и абсолютные и относительные пути к подменю.

Любые предложения, в чем проблема здесь?

С наилучшими пожеланиями!


person Markus Petermann    schedule 09.06.2015    source источник
comment
Попробуйте следующее: liquibase.org/bestpractices.html   -  person Prashant    schedule 09.06.2015
comment
Возможно, вам следует добавить свою структуру папок файлов журнала изменений. db_changelog_1.0.xml тоже находится в папке db? Вы пробовали /db/db_changelog_1.0.xml и /db_changelog_1.0.xml и db/db_changelog_1.0.xml?   -  person Jens    schedule 11.06.2015
comment
вы нашли решение для этого?   -  person bilak    schedule 23.05.2017


Ответы (2)


У меня есть журналы изменений в другой банке в src/main/resources/db/changelog/dbchange-master.xml и dbchange-2.xml.

Если я включу dbchange-2.xml в master, как это

<include file="classpath:/db/changelog/dbchange-2.xml" />

оно работает.

person kqr    schedule 11.08.2016

Ключом к распространению наборов изменений в jar-файлах и загрузке их через путь к классам является добавление к схеме classpath в корневом журнале изменений суффикса *, то есть <includeAll path="classpath*:/db/changelog/changesets"/>.

Примечание. В некоторых версиях Liquibase это было нарушено.

<databaseChangeLog  
                xmlns="http://www.liquibase.org/xml/ns/dbchangelog"  
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
                xmlns:pro="http://www.liquibase.org/xml/ns/pro"  
                xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd
                    http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd">
  
  <includeAll path="classpath*:/db/changelog/changesets"/>

</databaseChangeLog>
person Jeff    schedule 19.04.2021