Liquibase 在单个 Maven 构建中多次执行变更集

Liquibase executes changeset several times in single Maven build

当我在 TeamCity 构建代理上 运行 简单的 Maven 项目时,我观察到一些奇怪的 Liquibase 行为。

Maven 项目结构:

changelogs/
databaseChangeLog.xml
pom.xml

运行 命令:mvn liquibase:update

databaseChangeLogs.xml 包含下一行:<includeAll path="changelogs/"/>

但是构建日志包含重复记录:

liquibase: databaseChangeLog.xml: /home/teamcity/BuildAgent/work/28fe713da351c06d/changelogs/1.xml: ChangeSet /home/teamcity/BuildAgent/work/28fe713da351c06d/changelogs/1.xml ran successfully in 40ms

liquibase: databaseChangeLog.xml:  Custom SQL executed
liquibase: databaseChangeLog.xml: changelogs/1.xml: ChangeSet changelogs/1.xml ran successfully in 36ms

所以 Liquibase 似乎从不同的位置获取了两次变更集:从构建代理的构建文件夹和项目的根目录。

有人遇到同样的问题吗? 有什么解决办法吗?

Liquibase 有一个设计缺陷,乍一看 "identical" 更改集是不同的。要绕过这种特性,您可以在 databaseChangeLog 标签或每个 changeSet 标签上使用 logicalFilePath 属性。这将为您的更改集添加另一级别的身份和唯一性。