2017-08-29 100 views
0

假设我有2个行家模块:数据源被包装为罐子门户被包装为战争,它依赖于数据源访问liquibase.properties战争

我使用Liquibase在我的项目,liquibase.properties存储在数据源模块资源。

现在我想用命令行使用我的配置文件来运行liquibase。我试图用命令来做到这一点:

java -jar liquibase.jar \ 
     --classpath=portal.war \ 
     --defaultsFile=liquibase.properties 
    rollback 

但我从Liquibase得到错误:

Errors: 
    --url is required 
    --changeLogFile is required 

看来,liquibase没有看到我的属性在嵌套JAR文件。我做错了什么?

回答

0

我在做什么错?

显然... liquibase能够从类路径中查找和加载属性。下面是试图打开属性文件作为资源代码:

try (InputStream resourceAsStream = getClass().getClassLoader() 
      .getResourceAsStream(potentialPropertyFile.getAbsolutePath())) { 
     if (resourceAsStream != null) { 
      parsePropertiesFile(resourceAsStream); 
     } 

} }

如果你不提供一个绝对资源路径,该代码将尝试解决主机文件系统中当前目录上下文中的路径。

(这是从HEAD Liquibase源代码作为2017年8月29日:

我认为这种行为是一个错误....)


解决方法:绝对资源路径的命令行选项指向您类路径上的属性文件。