You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liquibase Maven插件报错XMLChangeLogSerializer无法实例化怎么解决?

问题描述

编译changelog时遇到问题,Liquibase无法加载正确的Serializer,执行diff命令时构建失败,错误提示找不到对应xml扩展名的序列化器。

我的插件配置如下:

<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<configuration>
    <changeLogFile>${project.basedir}/src/main/resources/config/liquibase/master.xml</changeLogFile>
    <diffChangeLogFile>${project.basedir}/src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
    <driver>org.h2.Driver</driver>
    <url>jdbc:h2:file:${project.build.directory}/h2db/db/my_project</url>
    <defaultSchemaName></defaultSchemaName>
    <username>my_project</username>
    <password></password>
    <referenceUrl>hibernate:spring:com.my.comp?dialect=org.hibernate.dialect.H2Dialect&amp;hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&amp;hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy</referenceUrl>
    <verbose>true</verbose>
    <logging>debug</logging>
    <contexts>!test</contexts>
    <diffExcludeObjects>oauth_access_token, oauth_approvals, oauth_client_details, oauth_client_token, oauth_code, oauth_refresh_token</diffExcludeObjects>
</configuration>

错误信息如下:

[INFO] Cannot load service: liquibase.serializer.ChangeLogSerializer:
Provider liquibase.serializer.core.xml.XMLChangeLogSerializer could
not be instantiated [INFO]
------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO]
------------------------------------------------------------------------ [INFO] Total time: 16.947 s [INFO] Finished at:
2021-09-25T11:57:46+02:00 [INFO]
------------------------------------------------------------------------ [ERROR] Failed to execute goal
org.liquibase:liquibase-maven-plugin:4.3.5:diff (default-cli) on
project notionmeet: [ERROR] Error setting up or running Liquibase:
[ERROR] liquibase.command.CommandExecutionException:
java.lang.RuntimeException: No serializers associated with the
filename or extension
'/home/projects/project/src/main/resources/config/liquibase/changelog/20210925095729_changelog.xml'

问题原因
  • Liquibase版本依赖冲突:liquibase-maven-plugin版本和项目引入的liquibase-core版本不匹配,4.x版本之后序列化器的SPI加载逻辑有调整,版本不一致会导致XMLChangeLogSerializer无法实例化
  • 依赖包损坏或SPI注册文件异常:liquibase-core包损坏,或类路径下存在多个重复的序列化器SPI注册文件,导致加载逻辑混乱
  • Spring Boot版本覆盖:如果是Spring Boot项目,Spring Boot自带的Liquibase依赖版本和手动配置的插件版本冲突,覆盖了正确的序列化器实现
  • changelog目录不存在:diff输出的目标目录未提前创建,间接导致序列化器绑定异常
解决办法
  1. 统一全局Liquibase版本,在pom的properties中固定liquibase.version,确保插件和核心依赖版本完全一致:
<properties>
    <liquibase.version>4.3.5</liquibase.version>
</properties>
  1. 若为Spring Boot项目,排除Spring Boot默认引入的liquibase-core,手动指定对应版本的依赖:
<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>${liquibase.version}</version>
</dependency>
  1. 清理本地Maven缓存,重新拉取依赖:
mvn clean install -U
  1. 提前创建diff输出的目标目录src/main/resources/config/liquibase/changelog,避免目录不存在导致的异常
  2. 如以上操作仍未解决,在liquibase-maven-plugin的configuration节点中显式指定序列化器实现:
<changeLogSerializerClass>liquibase.serializer.core.xml.XMLChangeLogSerializer</changeLogSerializerClass>

内容的提问来源于stack exchange,提问作者Borzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:27:03