如果计算机未连接到互联网,Liquibase将失败

时间:2015-09-02 09:56:16

标签: liquibase

当我尝试启动Liquibase(使用Karaf)时,我收到以下错误

  

'无法读取架构文档http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xml,因为1)无法找到该文档; 2)文件无法阅读; 3)文档的根元素不是'

如果计算机已连接到互联网,则不会再现此错误。

4 个答案:

答案 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/dbchangelogdbchangelog-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文件。