Gradleから最新版のFlywayを実行しようとしたら No database found to handle になった

## 現象
- SpringBootでアプリケーションを作成
- ビルドはGradle（Mavenでも変わらないと思います）
- GradleからFlywayを操作したくて設定を記述
- flyway clean を実行したところ `No database found to handle` というエラーが出て実行出来ない
- DB設定は正しいはず（正しかった）
- ※ 依存のバージョンは読み替えてください

## 解決方法
build.gradleのpluginsの前に下記を記入する必要がある
```
buildscript {
    dependencies {
        classpath("org.flywaydb:flyway-database-postgresql:10.7.2")
    }
}
```

## エラー全文

```
Execution failed for task ':flywayClean'.
> Error occurred while executing flywayClean
  No database found to handle jdbc:postgresql://localhost:5432/postgres
```

## build.gradle全文
```
buildscript {
    dependencies {
        classpath("org.flywaydb:flyway-database-postgresql:10.7.2")
    }
}

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.2'
    id 'io.spring.dependency-management' version '1.1.4'
    id "org.flywaydb.flyway" version "10.7.2"
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    runtimeOnly 'org.postgresql:postgresql'
    // https://mvnrepository.com/artifact/org.flywaydb/flyway-core
    implementation 'org.flywaydb:flyway-core:10.7.2'
    // https://mvnrepository.com/artifact/org.flywaydb/flyway-database-postgresql
    runtimeOnly 'org.flywaydb:flyway-database-postgresql:10.7.2'

    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

flyway {
    url = 'jdbc:postgresql://localhost:5432/postgres'
    user = 'postgres'
    password = 'example'
    locations = ['classpath:db/migration']
    cleanDisabled = false
}
```

## 何が起こったのか
Flyway10.0 から
データベースサポートが flyway-core から分離されたようです。
これにより各データベースの依存を runtimeOnly で追加しなければならなくなりました。

https://documentation.red-gate.com/fd/postgresql-184127604.html

これは情報があるのでまだわかるのですが、
Gradle からflywayを使用する際はbuildscriptにclasspathを追加しなければならないという情報は下記URLを見ないとわかりませんでした。

https://github.com/flyway/flyway/issues/3774

メッセージが的外れという話はこのissueでも出ているのでいずれ改善があるかもしれません。

## SpringBootのGradleプロジェクトでFlywayを使用する際に行う設定

### これまでの設定
- plugins に flyway の設定を追加
```
id "org.flywaydb.flyway" version "10.7.2"
```

- dependencies に flyway-core を追加
```
implementation 'org.flywaydb:flyway-core:10.7.2'
```

- flyway のスクリプトを追加
```
flyway {
    url = 'jdbc:postgresql://localhost:5432/postgres'
    user = 'postgres'
    password = 'example'
    locations = ['classpath:db/migration']
    cleanDisabled = false
}
```
※ 話が少し逸れますがいつのバージョンからかうっかり clean コマンドを実行しないようにデフォルト設定でcleanコマンドが使えなくなるcleanDisabledというプロパティが追加されていました。cleanコマンドを使うにはこれを無効化する必要があります。

### 新たに追加する必要のある設定
- buildscriptのdependenciesでflywayのDBへのclasspath(postgresqlの場合は `flyway-database-postgresql` を設定（MySQLなど他のDBでも同様）
```
buildscript {
    dependencies {
        classpath("org.flywaydb:flyway-database-postgresql:10.7.2")
    }
}
```

- dependenciesにDBの依存を追加
```
runtimeOnly 'org.flywaydb:flyway-database-postgresql:10.7.2'
```

## runtimeOnly 'org.flywaydb:flyway-database-postgresql' を設定しなかったときのエラーメッセージ
エラーメッセージだけを見てdb向けの依存が無いということを見抜くのは難しいです
```
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Unsupported Database: PostgreSQL 15.2
```