在 Liquibase 4.0 中删除了通过绝对路径指定文件
Specifying files by absolute path was removed in Liquibase 4.0
当我 运行 我的 Spring 引导应用程序时,我收到以下 liquibase 错误:
在 Liquibase 4.0 中删除了通过绝对路径指定文件。请使用相对路径或在class路径参数中添加'/'。
这是 application.yaml 中的 class 路径:
liquibase:
change-log: classpath:db/changelog/db-changelog-master.xml
我也试过:
liquibase:
change-log: classpath:/db/changelog/db-changelog-master.xml
文件夹结构如下:
更新日志大师:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
<include file="db-changelog-1.0.xml"/>
</databaseChangeLog>
看起来这已在 v4.4.3 中修复
我在将更改日志文件放在资源文件夹之外时遇到了这个问题,但是如果我将它们包含在 resources/db/changelog 下,那么它可以通过设置波纹管正常工作配置
spring.liquibase.change-log=classpath:/db/changelog/changelog-master.xml
在 4.6.2 下测试
只需尝试从“change-log:”参数中删除“classpath:”。
还请尝试检查您的 pom.xml(配置中的“changeLogFile”标签):
在更改日志文件路径之前不应有“${basedir}”。
<changeLogFile>
/src/main/resources/liquibase/changelog.xml
</changeLogFile>
正如解释的那样here
How the Liquibase classpath worked before version 4.0
Before version 4.0, one of the default locations Liquibase added to
the classpath was the root directory in your filesystem (/). The
change caused issues because of a machine-dependent changelog path,
such as /home/my-user/projects/liquibase/changelog.xml, found under
the / directory. This way, Liquibase uses the given path as part of
the changeset identifier stored in the DATABASECHANGELOG table, and
when you run Liquibase from
/home/other-user/projects/liquibase/changelog.xml, Liquibase sees it
as a different changelog and tries to rerun all the previously run
changesets.
To prevent identification issues from happening, a / was removed as a
default part of the classpath. How the Liquibase classpath works in
4.0 and later versions
Starting with Liquibase 4.0, the root directory (/) is no longer a
default part of the classpath because of the issue mentioned in the
previous section.
...
消息“请使用相对路径或将‘/’添加到类路径参数。”指的是根目录'/',并不意味着在类路径路径的开头添加斜杠。 Afaik,classpath:x
和 classpath:/x
是一样的。
此外,无论出于何种原因,找不到主更新日志时都会出现该消息,因此拼写错误也可能导致此消息。这只是一个提示,告诉你它可能找不到,因为文件不在类路径中,因为他们从类路径中删除了根目录,但也找不到,因为你指定了错误的路径(我就是这样做的) .
要正确配置它,主更改日志必须位于 Liquibase 类路径中。在 Spring Boot 中,Liquibase 类路径设置为应用程序的类路径,即您可以使用 src/main/resources
.
Tl;dr:当您的文件 src/main/resources/db/changelog/db.changelog-master.xml
使用
spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
我不知道,对于某些 Liquibase 版本,是否存在或存在与此相关的错误,但这就是 应该 工作的方式,无论如何。
不幸的是,这仍然是一个悬而未决的问题。参见 2281。
当我 运行 我的 Spring 引导应用程序时,我收到以下 liquibase 错误:
在 Liquibase 4.0 中删除了通过绝对路径指定文件。请使用相对路径或在class路径参数中添加'/'。
这是 application.yaml 中的 class 路径:
liquibase:
change-log: classpath:db/changelog/db-changelog-master.xml
我也试过:
liquibase:
change-log: classpath:/db/changelog/db-changelog-master.xml
文件夹结构如下:
更新日志大师:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
<include file="db-changelog-1.0.xml"/>
</databaseChangeLog>
看起来这已在 v4.4.3 中修复
我在将更改日志文件放在资源文件夹之外时遇到了这个问题,但是如果我将它们包含在 resources/db/changelog 下,那么它可以通过设置波纹管正常工作配置
spring.liquibase.change-log=classpath:/db/changelog/changelog-master.xml
在 4.6.2 下测试
只需尝试从“change-log:”参数中删除“classpath:”。 还请尝试检查您的 pom.xml(配置中的“changeLogFile”标签): 在更改日志文件路径之前不应有“${basedir}”。
<changeLogFile>
/src/main/resources/liquibase/changelog.xml
</changeLogFile>
正如解释的那样here
How the Liquibase classpath worked before version 4.0
Before version 4.0, one of the default locations Liquibase added to the classpath was the root directory in your filesystem (/). The change caused issues because of a machine-dependent changelog path, such as /home/my-user/projects/liquibase/changelog.xml, found under the / directory. This way, Liquibase uses the given path as part of the changeset identifier stored in the DATABASECHANGELOG table, and when you run Liquibase from /home/other-user/projects/liquibase/changelog.xml, Liquibase sees it as a different changelog and tries to rerun all the previously run changesets.
To prevent identification issues from happening, a / was removed as a default part of the classpath. How the Liquibase classpath works in 4.0 and later versions
Starting with Liquibase 4.0, the root directory (/) is no longer a default part of the classpath because of the issue mentioned in the previous section.
...
消息“请使用相对路径或将‘/’添加到类路径参数。”指的是根目录'/',并不意味着在类路径路径的开头添加斜杠。 Afaik,classpath:x
和 classpath:/x
是一样的。
此外,无论出于何种原因,找不到主更新日志时都会出现该消息,因此拼写错误也可能导致此消息。这只是一个提示,告诉你它可能找不到,因为文件不在类路径中,因为他们从类路径中删除了根目录,但也找不到,因为你指定了错误的路径(我就是这样做的) .
要正确配置它,主更改日志必须位于 Liquibase 类路径中。在 Spring Boot 中,Liquibase 类路径设置为应用程序的类路径,即您可以使用 src/main/resources
.
Tl;dr:当您的文件 src/main/resources/db/changelog/db.changelog-master.xml
使用
spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
我不知道,对于某些 Liquibase 版本,是否存在或存在与此相关的错误,但这就是 应该 工作的方式,无论如何。
不幸的是,这仍然是一个悬而未决的问题。参见 2281。