Posted about 7 years ago. Visible to the public. Linked content.

Gradle and dbmaintain

Introduction

dbmaintain is plugin (best for my opinion) that allowes to safely migrate dbscheme. It has excellent support for Maven and Ant but not for Gradle. But Gradle has excellent support for Ant, so we can call dbmaintain ant tasks from Gradle build script.

A small note - I prefer to not contain any libraries in my source code repository (Git currently), so dbmaintain will be loaded from the maven's central repository.

Disclaimer

This text don't cover work with dbmaintain. If you need more information about this powerful db migration tool, please visit an official site: http://www.dbmaintain.org/

Solution

In first step, we need add dbmaintain Ant task into our gradle.build, but only for build time. dbmaintain.jar shouldn't be placed into WAR.

Add a new custom configuration (you can named it as you wish, for example dbmaintain):

Copy
configurations { antClasspath }

And add dbmaintain to antClasspath configuration:

Copy
dependencies { antClasspath "org.dbmaintain:dbmaintain:2.4" }

Add new task dbmaintain, that declare custom Ant tasks from dbmaintain (you can do it after dependencies block):

Copy
ant.taskdef( resource: "dbmaintain-anttasks.xml", classpath: configurations.antClasspath.asPath )

Now we can use dbmantain's Ant tasks. Make recreate database gradle task:

Copy
task recreateDatabase << { def sqlFolder = "${rootDir}/src/main/sql" def config = "${rootDir}/src/test/resources/dbmaintain.properties" ant.clearDatabase(configFile: config) ant.updateDatabase(scriptLocations: sqlFolder, configFile: config) }

Now you can recreate database with Gradle:

Copy
gradle recreateDatabase

If you want to include this task into build lifecycle you should make processTestResource (default task from java plugin) depends on our new task:

Copy
processTestResources.dependsOn recreateDatabase

Owner of this card:

Avatar
leonidv
Last edit:
about 7 years ago
Posted by leonidv to Leonid's cards
This website uses short-lived cookies to improve usability.
Accept or learn more