How to get rid of Liquibase includeAll tag with formatted .sql changesets error: Cannot find the declaration of element 'databaseChangeLog'

How to get rid of Liquibase includeAll tag with formatted .sql changesets error: Cannot find the declaration of element 'databaseChangeLog'

我正在使用带有 liquibase 的 Gradle Spring 项目。对于 运行 liquibase,我正在 运行ning 通过编译项目创建的 jar。我正在尝试在 xml 更新日志中使用 liquibase “includeAll” 标签到 运行 我称为 includeAllScriptsTest 的目录中的所有格式化 sql 更新日志脚本(当前仅包含一个 .sql 文件名为 test.sql,带有一个变更集)。

如果我尝试在我的主 db-changelog 文件中使用 includeAll,在 运行 时间 liquibase returns 错误:file:///.../conf/db/db.changelog -master.xml/ 不是可识别的文件类型。

为了解决这个问题,我从我的 db-changelog-master.xml 中引用了另一个名为 includeAll-changelog.xml 的 xml。在这个文件中我有 includeAll 标签,下面是这个文件的内容。

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog 
        xmlns="https://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog conf/xsd/dbchangelog-3.8.xsd">
    <includeAll path="***/includeAllScriptsTest/" relativeToChangelogFile="true"/>
</databaseChangeLog>

在 includeAllScriptsTest 文件夹中有一个名为 test.sql 的文件,其内容如下:

--liquibase formatted sql
--changeset author:1  dbms:MySQL splitStatements:true endDelimiter://

DROP PROCEDURE IF EXISTS `TESTINCLUDEALL`;//

CREATE PROCEDURE `TESTINCLUDEALL`()

BEGIN

SELECT * FROM TABLE;
END;//

但是,这在 运行 时给了我一个不同的错误:cvc-elt。1.a:找不到元素 'databaseChangeLog' 的声明。我发现关于是否可以将 includeAll 与我的项目使用的 liquibase 版本一起使用的在线冲突信息。我目前使用的是 3.4.1.

cvc-elt.1.a: Cannot find the declaration of element 'databaseChangeLog'

此错误是一个 XML 解析错误,指向 databaseChangeLog 未在 xml 架构中声明。

也许您可以尝试在更新日志中使用以下 XSD:

<?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.8.xsd">
    <includeAll path="***/includeAllScriptsTest/" relativeToChangelogFile="true"/>
</databaseChangeLog>

如果这仍然没有帮助,请查看 上回答的几点。