访问liquibase.properties与战争



让我们假设我有2个Maven模块: dataSource jar portal 打包为 war ,这取决于 dataSource

我在项目中使用liquibase, liquibase.properties 存储在 dataSource 模块资源中。

现在,我想使用我的配置文件使用命令行运行Liquibase。我正在尝试使用命令:

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

,但我从liquibase中遇到错误:

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

似乎Liquibase在嵌套 jar 中没有看到我的属性文件。我做错了什么?

我做错了什么?

显然... Liquibase能够从类路径找到和加载属性。这是试图打开属性文件作为资源的代码:

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

如果您不提供绝对资源路径,则代码将尝试在主机文件系统中当前目录的上下文中解析路径。

(这是从2017-08-29开始的液体液体源代码:

  • https://github.com/liquibase/liquibase/commit/ff5d7842ab73b73b90642582582f27f27fdddf3eb91088a863

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


解决方法:更改命令行选项以指定您属性文件资源的 absolute 资源路径。

最新更新