Requirements
- Some of the sub-projects need to run flyway as a gradle task
- We want a single command line to do the flyway migrations for all the sub-projects mentioned above
Solution
- Apply flyway plugin in these sub-projects
- Config flyway in these sub-projects
- Create a root-project task to call the flyway tasks in the sub-projects
Code
buildscript {
dependencies {
classpath 'org.postgresql:postgresql:42.2.10' //or any other jdbc driver
}
plugins {
id "org.flywaydb.flyway" version "6.2.4" apply false //get it in but donot apply it for root project
}
task dbMigrate(){ //root project task
dependsOn "foo:flywayMigrate"
}
...
project(':foo') { //a sub project
apply plugin: "org.flywaydb.flyway"
def dbHost = findProperty('fooDbHost')
flyway{
url = "jdbc:postgresql://${dbHost}:5432/xxx"
user = findProperty('fooDbUsername')
password = findProperty('fooDbPassword')
}
...
}
...
project(':bar') { //a sub project
apply plugin: "org.flywaydb.flyway"
def dbHost = findProperty('barDbHost')
flyway{
url = "jdbc:postgresql://${barDbHost}:5432/xxx"
user = findProperty('barDbUsername')
password = findProperty('barDbPassword')
}
...
}
buildscript {
dependencies {
classpath 'org.postgresql:postgresql:42.2.10' //or any other jdbc driver
}
plugins {
id "org.flywaydb.flyway" version "6.2.4" apply false //get it in but donot apply it for root project
}
task dbMigrate(){ //root project task
dependsOn "foo:flywayMigrate"
}
...
project(':foo') { //a sub project
apply plugin: "org.flywaydb.flyway"
def dbHost = findProperty('fooDbHost')
flyway{
url = "jdbc:postgresql://${dbHost}:5432/xxx"
user = findProperty('fooDbUsername')
password = findProperty('fooDbPassword')
}
...
}
...
project(':bar') { //a sub project
apply plugin: "org.flywaydb.flyway"
def dbHost = findProperty('barDbHost')
flyway{
url = "jdbc:postgresql://${barDbHost}:5432/xxx"
user = findProperty('barDbUsername')
password = findProperty('barDbPassword')
}
...
}
buildscript { dependencies { classpath 'org.postgresql:postgresql:42.2.10' //or any other jdbc driver } plugins { id "org.flywaydb.flyway" version "6.2.4" apply false //get it in but donot apply it for root project } task dbMigrate(){ //root project task dependsOn "foo:flywayMigrate" } ... project(':foo') { //a sub project apply plugin: "org.flywaydb.flyway" def dbHost = findProperty('fooDbHost') flyway{ url = "jdbc:postgresql://${dbHost}:5432/xxx" user = findProperty('fooDbUsername') password = findProperty('fooDbPassword') } ... } ... project(':bar') { //a sub project apply plugin: "org.flywaydb.flyway" def dbHost = findProperty('barDbHost') flyway{ url = "jdbc:postgresql://${barDbHost}:5432/xxx" user = findProperty('barDbUsername') password = findProperty('barDbPassword') } ... }
Now run it on the root level of your project:
./gradlew dbMigrate -PfooDbHost=xxx -PfooDbUsername=xxx -PfooDbPassword=xxx -PbarDbHost=xxx -PbarDbUsername=xxx -PbarDbPassword=xxx
./gradlew dbMigrate -PfooDbHost=xxx -PfooDbUsername=xxx -PfooDbPassword=xxx -PbarDbHost=xxx -PbarDbUsername=xxx -PbarDbPassword=xxx
./gradlew dbMigrate -PfooDbHost=xxx -PfooDbUsername=xxx -PfooDbPassword=xxx -PbarDbHost=xxx -PbarDbUsername=xxx -PbarDbPassword=xxx