如何将参数添加到 flyway build.gradle 文件?
How to add parameters to flyway build.gradle file?
我的 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)
我怎样才能在里面得到一个 属性?
我相信你的问题是,当你在 flyway
配置闭包(即 flyway { ... }
部分)时,你的委托对象(即当 属性 未找到时在您的本地代码中,class gradle 将在接下来查找)是 flyway 扩展。换句话说,当您在 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.
这有效:
def devEnv = System.properties.containsKey("devEnv")
flyway {
.....
if (devEnv) {
locations += "filesystem:some/path"
}
....
}
并像这样调用 flyway:
./gradlew flywayClean -DdevEnv -Dflyway.configFiles=...
我的 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)
我怎样才能在里面得到一个 属性?
我相信你的问题是,当你在 flyway
配置闭包(即 flyway { ... }
部分)时,你的委托对象(即当 属性 未找到时在您的本地代码中,class gradle 将在接下来查找)是 flyway 扩展。换句话说,当您在 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.
这有效:
def devEnv = System.properties.containsKey("devEnv")
flyway {
.....
if (devEnv) {
locations += "filesystem:some/path"
}
....
}
并像这样调用 flyway:
./gradlew flywayClean -DdevEnv -Dflyway.configFiles=...