如何将参数添加到 flyway build.gradle 文件?
Posted
技术标签:
【中文标题】如何将参数添加到 flyway build.gradle 文件?【英文标题】:How to add parameters to flyway build.gradle file? 【发布时间】:2020-12-22 14:08:28 【问题描述】:我的 build.gradle 文件中有这个:
flyway
url = 'jdbc:oracle:thin:@localhost:1521:DB'
user = 'user'
password = 'pass'
driver = 'oracle.jdbc.OracleDriver'
placeholderReplacement = true
schemas = ['OWNER']
println "PRINT ARG:"
println testArg
locations = ["filesystem:soem-path/common"]
placeholders = [
'some.store.owner': flyway.schemas[0],
'some.user' : 'USER',
]
在我使用 testArg 添加该部分后,构建总是失败。我想把它弄成这样:
./gradlew flywayMigrate -PtestArg=test -Dflyway.configFiles=../flyway/flyway-dev.properties -i
错误信息是:
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'testArg' for object of type org.flywaydb.gradle.FlywayExtension.
at org.gradle.internal.metaobject.AbstractDynamicObject.getMissingProperty(AbstractDynamicObject.java:87)
at org.gradle.internal.metaobject.ConfigureDelegate.getProperty(ConfigureDelegate.java:130)
我怎样才能在那里获得房产?
【问题讨论】:
【参考方案1】:我相信您的问题是,当您在 flyway
配置闭包(即 flyway ...
部分)内时,您的委托对象(即当您的本地代码中找不到属性时,什么类 gradle 看起来在下一个)是飞路扩展。换句话说,当您在 flyway ...
中时,gradle 将在 flyway 插件代码中查找您的代码中未立即找到的任何属性。
您正在寻找的是 gradle project
对象上的属性。例如,您可以执行以下操作:
ext
projectProperty = name ->
project.hasProperty(name) ? project.properties[name] : null
flyway
def testArg = projectProperty('testArg')
println "project property testArg: $testArg"
(未经测试,但至少原则上应该可以工作)。
hasProperty
调用可确保在未为项目设置属性时代码不会中断。
有关 groovy 闭包委托的解释,groovy 语言文档有 a section specifically explaining this。
【讨论】:
【参考方案2】:这行得通:
def devEnv = System.properties.containsKey("devEnv")
flyway
.....
if (devEnv)
locations += "filesystem:some/path"
....
并像这样调用flyway:
./gradlew flywayClean -DdevEnv -Dflyway.configFiles=...
【讨论】:
以上是关于如何将参数添加到 flyway build.gradle 文件?的主要内容,如果未能解决你的问题,请参考以下文章