liquibase命令行:找不到元素的声明' changeSet'

时间:2014-05-08 11:27:19

标签: xml liquibase

我正在尝试组织我的更改集,以便每个文件都有一个changeset元素,如Liquibase Best Practices所暗示的那样,但是当我尝试在我的liquidbase xml文件上使用validate命令时出现以下错误

  

liquibase:cvc-elt.1:找不到元素的声明   “变更”。 liquibase:作为SAXException抛出的错误:解析时出错   ./1.xml的第3行第38列:cvc-elt.1:找不到声明   元素'changeSet'。

我做错了什么?

master.xml:

<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="./1.xml"/>
    <include file="./2.xml"/>
</databaseChangeLog>

1.XML:

<?xml version="1.0" encoding="utf-8" ?>

<changeSet  id="1" author="me">
    <createTable
        tableName="CLIENTS"
        ...
    </createTable>
</changeSet >

2 个答案:

答案 0 :(得分:6)

每个包含的文件都需要与标准更改日志具有相同的XML根节点 - 因此您的1.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"
    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">
  <changeSet  id="1" author="me">
      <createTable
          tableName="CLIENTS"
          ...
      </createTable>
  </changeSet >

您可能还需要在主更新日志中指定所包含的文件相对于主更改日志。

...
  <include file="1.xml" relativeToChangelogFile="true"/>
...

是否需要这样做取决于你如何运行liquibase。

答案 1 :(得分:2)

请参阅此处的帖子 - http://forum.liquibase.org/topic/declaration-not-found-databasechangelog。 在xml文件中将xsd版本从3.0更改为2.0对我有用。