我需要在两个不同的 shcemas 上运行两个不同的 Flyway 迁移,每个都有自己的用户帐户。 根据 Flyway 文档,我只需要为每个与
FlywayMigrateTask
的连接设置一个自定义任务。来自使用默认(Groovy)gradle 的官方文档:
task migrateDatabase1(type: org.flywaydb.gradle.task.FlywayMigrateTask) {
url = 'jdbc:h2:mem:mydb1'
user = 'myUsr1'
password = 'mySecretPwd1'
}
task migrateDatabase2(type: org.flywaydb.gradle.task.FlywayMigrateTask) {
url = 'jdbc:h2:mem:mydb2'
user = 'myUsr2'
password = 'mySecretPwd2'
}
我尝试在 Kotlin gradle (kts) 中执行此操作,但我的项目无法解析对
FlywayMigrateTask
的引用,即使我的 External Libraties
中有它:
如何注册任务:
tasks.register(
"flywayTesting",
type = org.flywaydb.gradle.task.FlywayMigrateTask::class.java) {
// Details hidden
}
我能够解析
org.flywaydb.gradle.task
包,但无法解析任务文件夹中的 FlywayMigrateTask
类。
我做错了什么?
我的 gradle 设置的亮点:
plugins {
kotlin("jvm") version "1.6.0"
id("org.flywaydb.flyway") version "8.5.1"
}
repositories {
mavenCentral()
}
tasks.withType<Wrapper> {
gradleVersion = "6.8.2"
distributionType = Wrapper.DistributionType.BIN
}
dependencies {
implementation("org.flywaydb:flyway-core:8.5.1")
implementation("org.flywaydb:flyway-gradle-plugin:8.5.0")
}
kotlin {
sourceSets["main"].apply {
kotlin.srcDir("src/main/kotlin")
}
}
这对我来说就是这样。
先添加Flyway Gradle插件:
plugins {
java
id("org.flywaydb.flyway") version "9.22.0"
}
然后,定义自定义任务:
task("flywayMigrateLocal", org.flywaydb.gradle.task.FlywayMigrateTask::class) {
description = "Migrates the local database"
url = "jdbc:postgresql://localhost:5432/test"
user = "test"
password = "test"
locations = arrayOf(
"filesystem:src/main/resources/db/migration",
"filesystem:src/test/resources/flyway/migrations_local"
)
}
task<org.flywaydb.gradle.task.FlywayMigrateTask>("migrateDatabase1") {
url = 'jdbc:h2:mem:mydb1'
user = 'myUsr1'
password = 'mySecretPwd1'
}
task<org.flywaydb.gradle.task.FlywayMigrateTask>("migrateDatabase2") {
url = 'jdbc:h2:mem:mydb2'
user = 'myUsr2'
password = 'mySecretPwd2'
}