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)
そこに物件を取得するにはどうすればよいですか?
------------------------
私はあなたの問題は、フライウェイ構成クロージャ(つまり、フライウェイ { ... }セクション)内にいるとき、デリゲートオブジェクト(つまり、ローカルコードでプロパティが見つからないとき、どのクラスのgradleが次をご覧ください) は飛行路の延長部分です。言い換えれば、flyway { ... } にいる間、gradle は見つからないプロパティを探します。flyway プラグイン コードのコード内ですぐに使用できます。
探しているのは、gradle プロジェクト オブジェクトのプロパティです。たとえば、次のようなことができます:
ext {
projectProperty = { name ->
project.hasProperty(name) ? project.properties[name] : null
}
}
flyway {
def testArg = projectProperty('testArg')
println "project property testArg: ${testArg}"
}
(未テストですが、少なくとも原理的には動作するはずです)。
hasProperty の呼び出しにより、プロジェクトにプロパティが設定されていないときにコードが壊れないことが確認されます。
Groovy クロージャの委任の説明については、Groovy 言語ドキュメントにこれを具体的に説明するセクションがあります。
------------------------
これはうまくいきました:
def devEnv = System.properties.containsKey("devEnv")
flyway {
.....
if (devEnv) {
locations += "filesystem:some/path"
}
....
}
そして次のように flyway を呼び出します:
./gradlew flywayClean -DdevEnv -Dflyway.configFiles=...