目前我尝试将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无法找到并加载子变更集。我也试过&lt; includeAll&gt;标记以及子变更集的绝对路径和相对路径,但没有成功。
有什么建议吗?
祝你好运!
答案 0 :(得分:0)
我在src / main / resources / db / changelog / dbchange-master.xml和dbchange-2.xml的其他jar中有我的更改日志
如果我像这样在主人中包含dbchange-2.xml
<include file="classpath:/db/changelog/dbchange-2.xml" />
它有效。
答案 1 :(得分:0)
在 jars 中分发变更集并通过类路径加载它们的关键是在您的根变更日志中添加 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>