我想做什么
我正在尝试使用 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 生成的。