【发布时间】:2021-06-03 16:46:59
【问题描述】:
我正在使用带有 liquibase 的 Gradle Spring 项目。要运行 liquibase,我正在运行通过编译项目创建的 jar。我正在尝试在 xml 变更日志中使用 liquibase“includeAll”标记来运行我称为 includeAllScriptsTest 的目录中的所有格式化 sql 变更日志脚本(当前仅包含一个名为 test.sql 的 .sql 文件和一个变更集)。
如果我尝试在我的主 db-changelog 文件中使用 includeAll,在运行时 liquibase 会返回错误: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。
【问题讨论】: