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

Spring应用中Liquibase Changelog执行报错:changelog-uris must be even

解决Liquibase执行报错‘changelog-uris must be even’的问题

嘿,这个报错看起来有点迷惑,但根源其实很简单——你的changelog XML代码没写完,存在语法不完整的问题!

你提供的代码最后一行是:

<column name="plattform_id" ty

这里明显截断了,<column>标签既没写完type属性,也没有闭合,这种不完整的XML会让Liquibase的解析器彻底混乱,进而抛出看似不相关的changelog-uris must be even错误。

修复步骤

  1. 补全最后那个残缺的<column>标签,参考你前面的表结构,应该是要定义type="int"并添加对应的外键约束;
  2. 确保整个XML文件的所有标签都正确闭合,没有任何语法遗漏。

修复后的完整示例代码

<?xml version="1.0" encoding="utf-8"?> 
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 
  <changeSet id="1" author="tobias"> 
    <createTable tableName="Entwickler"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"/> 
      <column name="webseite" type="varchar(50)"/> 
      <column name="gruendungsdatum" type="BIGINT"/> 
    </createTable> 
    <createTable tableName="Publisher"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"/> 
      <column name="webseite" type="varchar(50)"/> 
      <column name="gruendungsdatum" type="BIGINT"/> 
    </createTable> 
    <createTable tableName="Spiel"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"/> 
      <column name="publisher_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_publisher" references="Publisher(id)"/> 
      </column> 
    </createTable> 
    <createTable tableName="Bilder"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"/> 
      <column name="picture_kind" type="varchar(50)"/> 
      <column name="game_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_game" references="Spiel(id)"/> 
      </column> 
    </createTable> 
    <createTable tableName="Spiel_Entwickler"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="entwickler_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_Entwickler" references="Entwickler(id)"/> 
      </column> 
      <column name="game_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_Game" references="Spiel(id)"/> 
      </column> 
    </createTable> 
    <createTable tableName="Language"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="Language" type="varchar(50)"/> 
    </createTable> 
    <createTable tableName="plattform"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="plattform" type="varchar(50)"/> 
    </createTable> 
    <createTable tableName="Redaktion"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="Redaktion" type="varchar(50)"/> 
    </createTable> 
    <createTable tableName="Language_Spiel"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"/> 
      <column name="spiel_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_spiel" references="Spiel(id)"/> 
      </column> 
      <column name="language_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_language" references="Language(id)"/> 
      </column> 
      <column name="Youtube" type="varchar(50)"/> 
      <column name="Beschreibung" type="varchar(50)"/> 
      <column name="Altersfreigabe" type="int"/> 
    </createTable> 
    <createTable tableName="spiel_plattform"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"/> 
      <column name="spiel_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_spiel" references="Language_Spiel(id)"/> 
      </column> 
      <column name="plattform_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_plattform" references="plattform(id)"/> 
      </column> 
      <column name="releasedate" type="bigint"/> 
      <column name="releasedate_kind" type="varchar(50)"/> 
      <column name="shop" type="varchar(50)"/> 
    </createTable> 
    <createTable tableName="Rating"> 
      <column name="id" type="int" autoIncrement="true"> 
        <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="redaktion_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_Rating" references="Redaktion(id)"/> 
      </column> 
      <column name="plattform_id" type="int"> 
        <constraints nullable="false" foreignKeyName="fk_plattform_rating" references="plattform(id)"/> 
      </column>
    </createTable>
  </changeSet>
</databaseChangeLog>

验证方法

  • 先用IDE自带的XML校验功能检查文件语法是否完整;
  • 重新执行Maven Liquibase命令(比如mvn liquibase:update),应该就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:09:40