3

Groovyファイルからフライウェイプロパティを取得するためにビルドするようにgradleをカスタマイズしようとしています

私の 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 の実行中にエラーが発生しました場所の不明なプレフィックス (filesystem: または classpath: のいずれかである必要があります): :**

誰かが場所を提供する方法を手伝ってくれますか? 環境に基づいて複数の場所を提供する必要があるため

ありがとう

4

2 に答える 2

0

間違ったタイプが原因で同じ問題が発生しました。与えられたStringが、String[]期待されています。

このように修正してください

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

次の質問は、貼り付け時に例外が発生した理由です。

Stringからへの強制String[]により、有線の問題が発生するためです。例えば、

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

うーん、本当に配線されています。ここでフライウェイの場所コードを確認すると、すべてが明らかになります。

[f, i, l, e, s, y, s, t, e, m, :, x, x, x]を除いて、すべての単語Stringがスキップされます。:

thenormalizedDescriptorは、または:と一致しないシグナルとしてスローされるです。filesystemclasspath

于 2020-04-19T01:57:12.133 に答える