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 update是000020-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 模式中声明一样。
我这样做是为了将来我可以根据需要创建任意数量的变更日志,并让它们一个接一个地自动执行。
我一直在为这个问题寻找一些解决方案,但我找不到任何东西。我找到了一个官方论坛的链接,但它现在是一个死链接。
额外信息:
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文件是必须运行以更新数据库的连续更改日志
导致我遇到问题的原因是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将不会执行使用的文件。
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |