带有 groovy 环境的 flyway gradle 插件

Posted

技术标签:

【中文标题】带有 groovy 环境的 flyway gradle 插件【英文标题】:flyway gradle plugin with groovy environments 【发布时间】:2015-06-24 18:53:15 【问题描述】:

我正在尝试自定义 gradle 来构建以从 groovy 文件中获取 flyway 属性

我的 environment.groovy 文件

environments 
    dev 
        flywayProperties 
            driver="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@localhost:1521/XE"
            user="test"
            password="test"
            locations= "classpath:db/migration,db/insert"   
        
    

    qa 
        flywayProperties 
            driver = "oracle.jdbc.driver.OracleDriver"
            url = "jdbc:oracle:thin:@localhost:1521/XE"
            user = "test"
            password = "test"
            locations = "classpath:db/migration"
        
    

还有我的 build.gradle

loadConfiguration()

task printProps << 
    println "Driver:  $config.flywayProperties.driver"
    println "URL:  $config.flywayProperties.url"
    println "User:  $config.flywayProperties.user"
    println "Password:  $config.flywayProperties.password"
    println "Locations:  $config.flywayProperties.locations"


def loadConfiguration() 
    def environment = hasProperty('env') ? env : 'dev'
    project.ext.envrionment = environment
    println "Environment is set to $environment"

    def configFile = file('environment.groovy')
    println configFile.toURL()

    def config = new ConfigSlurper("$environment").parse(configFile.toURL())
    project.ext.config = config


flyway 
    driver = "$config.flywayProperties.driver"
    url = "$config.flywayProperties.url"
    user = "$config.flywayProperties.user"
    password = "$config.flywayProperties.password"
    //locations = ['classpath:db/migration' , 'db/insert']   -- Works fine
    locations = "$config.flywayProperties.locations" -- Throws below error

当我尝试执行 'gradle flywayInfo' 时出现以下错误

**FAILURE:构建失败并出现异常。 * 出了什么问题:任务 ':flywayInfo' 执行失败。

执行flywayInfo时发生错误位置前缀未知(应该是文件系统:或类路径:)::**

谁能帮助我如何提供位置。因为我需要根据环境提供多个位置

谢谢

【问题讨论】:

【参考方案1】:

你试过了吗:

 locations = config.flywayProperties.locations

?

【讨论】:

【参考方案2】:

我遇到了由错误类型引起的相同问题。给定String,但预期String[]

请这样修改

locations = "$config.flywayProperties.locations".split(',')

下一个问题是为什么在粘贴时会发生异常?

因为从StringString[] 的强制转换将导致有线问题。例如,

(String[])"filesystem:xxx"
=> [f, i, l, e, s, y, s, t, e, m, :, x, x, x]

嗯,确实是有线的。所以当我们查看飞行路线位置代码here时,一切都会清楚。

除了 [f, i, l, e, s, y, s, t, e, m, :, x, x, x] 中的 : 之外,所有单字 String 将被跳过

normalizedDescriptor:,它将作为与filesystemclasspath 不匹配的信号抛出。

【讨论】:

以上是关于带有 groovy 环境的 flyway gradle 插件的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地处理带有嵌入式数据库的 Flyway 以进行集成测试?

是否可以将 Flyway、Liquibase 等数据库迁移工具与应用程序代码库集成?

带有用户名和密码的 Zonky + Spring Boot + Postgres + Flyway

在 Maven 中使用带有 Flyway 和 jOOQ 的嵌入式数据库进行持续集成

错误记录IntelliJ IDEA 编译 Groovy 项目报错 ( Groovy SDK is not configured for module )

带有 Spring Boot 的 Flyway Core 给出错误 'delayedFlywayInitializer' 和 'entityManagerFactory' 之间的循环依赖关系