无需修改配置 命令行传参运行Gradle Liquibase diffChangelog任务
核心结论
无需修改任何项目配置文件(包括build.gradle、gradle.properties)即可直接通过命令行传参执行diffChangelog任务,之前传参失效、报参数缺失的核心原因是传参标识、参数名格式用错,且命令里存在参数拼写错误。
传参规则说明
- 所有Liquibase插件的任务参数,统一使用Gradle项目参数标识
-P传递,禁止用-D(该标识用于传JVM系统参数,插件默认不读取),也禁止直接用--前缀拼接参数(该写法仅对Gradle内置参数生效,第三方插件无法识别) - 参数名必须使用驼峰格式,不要用连字符格式:例如
reference-url要写为referenceUrl,changelog-file要写为changelogFile - 参数值直接跟在
=后即可,若值包含空格、特殊字符再用引号包裹
修正后的直接执行命令
将占位符替换为真实值即可直接运行:
./gradlew diffChangelog \ -Purl="AA" \ -Pusername="BB" \ -Ppassword="CC" \ -PreferenceUsername="DD" \ -PreferencePassword="EE" \ -PreferenceUrl="FF" \ -PchangelogFile="GG"
之前报
liquibase.exception.CommandValidationException: Invalid argument '--reference-url': missing required argument的原因:--reference-url=xxx的写法会被Gradle识别为自身命令参数,不会透传给Liquibase插件,插件拿不到必填的基准库连接地址,直接抛出校验错误。另外原命令里的changelog-gile为拼写错误,正确参数名为changelogFile。
可直接分发的bash脚本封装
将以下内容保存为独立脚本文件,无需改动任何项目文件即可分发使用:
#!/bin/bash set -e if [ $# -ne 7 ]; then echo "调用方式: $0 <目标库连接地址> <目标库用户名> <目标库密码> <基准库用户名> <基准库密码> <基准库连接地址> <changelog输出路径>" exit 1 fi ./gradlew diffChangelog \ -Purl="$1" \ -Pusername="$2" \ -Ppassword="$3" \ -PreferenceUsername="$4" \ -PreferencePassword="$5" \ -PreferenceUrl="$6" \ -PchangelogFile="$7"
脚本使用前先执行chmod +x 脚本文件名添加执行权限,后续按提示传入7个对应参数即可运行。
避坑提醒
- 禁止使用连字符格式传参:例如
-Preference-url=xxx属于错误写法,插件无法识别 - 禁止错误使用传参标识:
-D、--前缀的传参方式均无法被插件正确接收,不要尝试 - 参数名严格匹配驼峰规则,注意不要出现拼写错误
-P是大写P,不要写成小写p,小写p是指定项目路径的Gradle内置参数,和传项目属性无关
内容的提问来源于stack exchange,提问作者Pma
相关产品推荐
相关产品推荐

