当我尝试启动Liquibase(使用Karaf)时,我收到以下错误
'无法读取架构文档http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xml,因为1)无法找到该文档; 2)文件无法阅读; 3)文档的根元素不是'
如果计算机已连接到互联网,则不会再现此错误。
答案 0 :(得分:4)
我最近偶然发现了这个。
你需要改变这个:
<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.0.xsd">
并删除XSD的URL:
<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 dbchangelog-3.0.xsd">
请注意http://www.liquibase.org/xml/ns/dbchangelog
和dbchangelog-3.0.xsd
之间的空格。第一个元素是命名空间的URI,第二个元素指向实际的XSD文件。如果不包含URL,则XML解析器将尝试使用本地文件。
然后将实际的XSD放入changelog XML所在的同一目录中。
您需要从计算机上下载互联网访问权限,例如使用:
wget http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
或者只需使用浏览器打开URL,然后保存文件。
请注意,您还需要为架构位置指定 .xsd
文件,而不是.xml
(如问题中所示)。
答案 1 :(得分:2)
此问题已修复。它使Liquibase-osgi.jar包含自己的包,它也包含liquibase.jar。当LiquibaseEntityResolver.java尝试查找* .xsd时,它会找到两个具有相同名称的文件* .xsd。之后liquibase抛出异常。我删除了重复的文件,一切正常
顺便说一句 changelog文件的根元素看起来像
<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.0.xsd">
答案 2 :(得分:0)
谢谢你。
但是,liquibase在liquibase / parser / core / xml /中有自己的xsd文件。
如果我们运行liquibase,例如,在tomcat中,它可以正常工作 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd“将被LiquibaseEntityResolver.java替换为liquibase / parser / core / xml / dbchangelog-3.0.xsd
答案 3 :(得分:-1)
对于使用Maven和 liquibase-maven-plugin 插件的用户,请务必将所有liquibase依赖项添加到插件依赖项中。
e.g。
<plugin>
...
<artifactId>liquibase-maven-plugin</artifactId>
...
<dependencies>
<dependency>
...
<artifactId>liquibase-core</artifactId>
</dependency>
</dependencies>
</plugin>
我遇到类似的问题,liquibase命令在断开连接时不起作用,因为插件无法解析本地架构.xsd文件。