groovy - flyway build.gradle ファイルにパラメータを追加するには?

okwaves2024-01-25  11

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=...

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。