Liquibase“在xml changeLog文件中找不到元素'databaseChangeLog'的声明”

Dan*_*iel 1 liquibase xml-parsing

遵循Liquibase 官方网站上的本指南,我创建了自己的changelog-master.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="https://www.liquibase.org/xml/ns/dbchangelog"
               xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="https://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
    <includeAll path="/home/username/liquibase/examples/sqlite-test" filter="sql"/>
</databaseChangeLog>
Run Code Online (Sandbox Code Playgroud)

然后我liquibase.properties在同一个文件夹中创建了该文件:

# Enter the path for your changelog file.
changeLogFile=changelog-master.xml

#### Enter the Target database 'url' information  ####
url=jdbc:sqlite://home/username/liquibase/examples/sqlite-test/testdb
Run Code Online (Sandbox Code Playgroud)

这是正确的,因为如果我运行正常的 .sql 更改日志,它会正确运行并更新我的数据库。

我然后创建了SQL changelog文件时,它有启动时自动执行的liquibase update000020-changelog.sql

--liquibase formatted sql

--changeset daniel:3
create table phonebook(name TEXT, surname TEXT, type TEXT, phone_number TEXT);
Run Code Online (Sandbox Code Playgroud)

但是当我去启动时,我liquibase update从 XML 解析器收到一个错误:

运行 Liquibase 时出现意外错误:cvc-elt.1.a:找不到元素“databaseChangeLog”的声明。

我无法理解问题是什么。我已经多次检查changelog-master.xml文件是否正确并且看起来是正确的。从我能找到的cvc-elt.1.a是一个 XML 解析错误,就像databaseChangeLog它没有在 xml 模式中声明一样。

我这样做是为了将来我可以根据需要创建任意数量的变更日志,并让它们一个接一个地自动执行。

我一直在为这个问题寻找一些解决方案,但我找不到任何东西。我找到了一个官方论坛的链接,但它现在是一个死链接。

额外信息:

  • Liquibase 版本 4.0.0
  • 安装 JRE:openjdk 11.0.8 2020-07-14
  • 操作系统:Debian 10
  • SQLite 版本 3.27.2

08/09/2020 编辑:

正如评论中所问,这是项目的结构:

root@dev-machine:/home/username/liquibase/examples/sqlite-test# ls -la
total 68
drwxr-xr-x 2 root    root     4096 Sep  4 17:28 .
drwxr-xr-x 5 username username  4096 Sep  4 17:02 ..
-rw-r--r-- 1 root    root      139 Sep  4 13:35 000020-changelog.sql
-rw-r--r-- 1 root    root      118 Sep  4 13:36 000030-changelog.sql
-rw-r--r-- 1 root    root      201 Sep  4 17:05 000040-changelog.sql
-rw-r--r-- 1 root    root      240 Sep  4 17:28 000050-changelog.sql
-rw-r--r-- 1 root    root      456 Sep  4 14:22 changelog-master.xml
-rw-r--r-- 1 root    root     2637 Sep  4 16:36 liquibase.properties
-rw-r--r-- 1 root    root    32768 Sep  4 17:28 testdb
Run Code Online (Sandbox Code Playgroud)

testdb是我用来测试 liquibase 的 sqlite 数据库。这些.sql文件是必须运行以更新数据库的连续更改日志

Dan*_*iel 5

导致我遇到问题的原因是changelog-master.xml我有一个过时的 XSD 版本,这导致某些东西闯入 XML 解析器。为了解决这个问题,我用以下内容对其进行了更改:

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog 
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
    xmlns:pro="http://www.liquibase.org/xml/ns/pro" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd 
    http://www.liquibase.org/xml/ns/pro 
    http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.0.xsd 
    http://www.liquibase.org/xml/ns/dbchangelog 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.0.xsd
    ">
    <includeAll path="schema/"/>
</databaseChangeLog>
Run Code Online (Sandbox Code Playgroud)

并将我所有的 *.sql 文件移动到schema/文件夹中。除此之外,我已经使用名称方案重命名了我的所有.sql文件*.databasetype.sql,在我的情况下000020-changelog.sqlite.sql。必须这样做,否则--liquibase formatted sql将不会执行使用的文件。