2

我想做什么

我正在尝试使用 Liquibase 的命令行工具和文件在 MySQL 数据库上运行更新,除非我绝对必须不破坏使用 maven 和 Jhipster 运行的项目,否则.war不要触摸该文件很重要。master.xml

我的代码是什么样的

按照官方文档中有关如何设置路径的示例:

java -jar liquibase.jar \
      --driver=oracle.jdbc.OracleDriver \
      --classpath=website.war \
      --changeLogFile=com/example/db.changelog.xml \
      --url=jdbc:oracle:thin:@localhost:1521:oracle \
      --username=scott \
      --password=tiger \
      update

我使我的 liquibase.properties 如下:

url=jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=utf8&useSSL=false&createDatabaseIfNotExist=true
username=username
password=password
driver=com.mysql.jdbc.Driver
classpath=target/application-0.0.1-SNAPSHOT.war
changeLogFile=src/main/resources/config/liquibase/master.xml

我的master.xml样子是这样的:

<?xml version="1.0" encoding="utf-8"?>
<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.4.xsd">

    <include file="classpath:config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>

我的命令行命令如下所示:

liquibase --defaultsFile=../dev.properties update

有什么错误

当我运行它时,我收到以下错误:

Unexpected error running Liquibase: java.lang.IllegalArgumentException: name

当然,什么也没有发生。Liquibase 运行它的启动很好,所以DATABASECHANGELOGLOCK数据库中有表。

我试过的

我尝试将我的changeLogFile属性编辑为以下内容:

changeLogFile=/home/user/project_src/src/main/resources/config/liquibase/master.xml
changeLogFile=WEB-INF/classes/config/liquibase/master.xml

但是,这些返回相同的错误消息。如果我尝试在我的系统上使用我的更改文件的确切路径,我当然会得到这个:

Unexpected error running Liquibase: /home/user/project_src/~/project_src/src/main/resources does not exist

SEVERE 5/19/17 9:38 AM: liquibase: /home/user/project_src/~/project_src/src/main/resources does not exist
liquibase.exception.CommandLineParsingException: /home/user/project_src/~/project_src/src/main/resources does not exist
    at liquibase.integration.commandline.Main.configureClassLoader(Main.java:828)
    at liquibase.integration.commandline.Main.run(Main.java:187)
    at liquibase.integration.commandline.Main.main(Main.java:103)

我还尝试编辑master.xml使包含标签看起来像这样:

<include file="changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="true"/>

这确实适用于命令行工具,但由于这也是通过 maven 和 Jhipster 运行的,所以我宁愿不操作这个文件,除非我必须这样做。

所有提到的技术都是他们的最新稳定版本,我在 Ubuntu 16.10 和 17.04 上遇到过这个问题。

我已经开始工作的解决方法

如果我直接放置一个更改文件路径,而不是master.xml它与上面列出的任何版本的路径完美运行,但是我必须手动运行每个更改日志,完全失去了它的点master.xml及其include标签。

其他信息

该项目是使用 Jhipster 生成的。

4

0 回答 0