【问题标题】:How to add parameters to flyway build.gradle file?如何将参数添加到 flyway build.gradle 文件?
【发布时间】: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)

我怎样才能在那里获得房产?

【问题讨论】:

    标签: gradle groovy flyway


    【解决方案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=...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 2015-11-13
        • 2020-12-02
        • 2012-07-30
        相关资源
        最近更新 更多