I faced with issue that I need use Liquibase migration without running application. (through the command ./gradlew update
)
I added the following section to one of my projects:
if (!project.hasProperty("url")) { project.ext.url = "jdbc:postgresql://localhost:5432/test" } if (!project.hasProperty("username")) { project.ext.username = "test" } if (!project.hasProperty("password")) { project.ext.password = "test" } if (!project.hasProperty("defaultSchemaName")) { project.ext.defaultSchemaName = "test" } if (!project.hasProperty("changelogFile")) { project.ext.changelogFile = "some-path/changelog-master.xml" } liquibase { activities { main { driver "org.postgresql.Driver" url project.ext.url username project.ext.username password project.ext.password defaultSchemaName project.ext.defaultSchemaName changelogFile project.ext.changelogFile } } }
This works, but it takes up a lot of space in build.gradle
, and the same task needs to be added to other projects as well.
Is it possible to bring this section into a plugin and organize work through the plugin?
Advertisement
Answer
The solution that helped me:
private void configureExtension(Project project) { project.getExtensions().configure(LiquibaseExtension.class, liquibaseExtension -> { var activity = liquibaseExtension.getActivities().create("main"); var arguments = new HashMap<>() { { put("url", url); put("username", username); put("password", password); put("defaultSchemaName", defaultSchemaName); put("classpath", classpath); put("changeLogFile", changeLogFile); } }; activity.setArguments(arguments); liquibaseExtension.getActivities().add(activity); }); }