我在运行Sping Boot 应用程序时收到以下liquibase错误:
在Liquibase 4中删除了通过绝对路径指定文件。0.请使用相对路径或在类路径参数中添加“/”。
下面是应用程序中的类路径。亚姆勒:
liquibase:
change-log: classpath:db/changelog/db-changelog-master.xml
我也试过:
liquibase:
change-log: classpath:/db/changelog/db-changelog-master.xml
以下是文件夹结构:
Changlog master:
<?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>
6条答案
按热度按时间dgenwo3n1#
我在将changelog文件放在resources文件夹之外时遇到了这个问题,但是如果我将它们包含在 resources/db/changelog 下,那么设置下面的配置就可以正常工作。
在4下测试。6.2
brjng4g32#
不幸的是,这仍然是一个悬而未决的问题。参见2281。
esyap4oy3#
这似乎是在v4中修复的。4.3
8qgya5xd4#
只需尝试从“change-log:“参数中删除“classpath:“即可。也试着检查你的POM。xml(配置中的“changeLogFile”标记):更改日志文件路径前不应有“${basedir}”。
v8wbuo2f5#
如here所示
Liquibase类路径在版本4之前是如何工作的。0
版本4之前。0,Liquibase添加到类路径的默认位置之一是文件系统中的根目录(/)。由于依赖于计算机的更改日志路径,例如/home/my-user/projects/liquibase/changelog,更改导致了问题。xml,位于/目录下。这样,Liquibase将给定路径用作存储在DATABASE ECHANGELOG表中的变更集标识符的一部分,并且当您从/home/other-user/projects/liquibase/changelog运行Liquibase时。xml,Liquibase将其视为不同的变更日志,并尝试重新运行所有以前运行的变更集。
为了防止发生标识问题,删除了类路径的默认部分/。Liquibase类路径在4.0及更高版本
从Liquibase 4开始。0,根目录(/)不再是类路径的默认部分,因为上一节中提到的问题。
...
消息“请使用相对路径或将'/'添加到类路径参数。“指的是根目录'/',并不意味着在类路径的开头添加斜杠。Afaik、
classpath:x
和classpath:/x
是相同的。此外,无论出于何种原因,当找不到主更改日志时,该消息会出现,因此打字错误也可能导致该消息。这只是一个提示,告诉您可能找不到它,因为文件不在类路径上,因为他们从类路径中删除了根目录,但也找不到它,因为您指定了错误的路径(我刚刚这样做了)。
要正确配置它,主更新日志必须位于Liquibase类路径上。在Sping Boot 中,Liquibase classpath被设置为应用程序的classpath,i。例如,您可以使用
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版本中是否有或有一个bug,但无论如何,这就是它的工作方式。
pdkcd3nj6#
我也有同样的问题。在我的例子中,我发现我们在pom中配置了一个资源过滤maven插件。xml和Liquibase SQL更改日志文件不包括在内。
下面的代码为我工作