Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Gradle liquibaseRuntime configuration in a Kotlin/Multiplatform project

Currently, I'm porting my Spring Boot build.gradle.kts configuration to the Kotlin/MP stack. I don't know what to do with one part of the liquibaseRuntime configuration. The original config looks like:

// other dependencies omitted  
liquibaseRuntime("org.liquibase:liquibase-core")
liquibaseRuntime("org.liquibase.ext:liquibase-hibernate5:3.8")
liquibaseRuntime(sourceSets.getByName("main").compileClasspath)
liquibaseRuntime(sourceSets.getByName("main").output)
liquibaseRuntime("org.postgresql:postgresql")
liquibaseRuntime("org.springframework.boot:spring-boot:$springBootVersion")

Some part of this config possibly can be replaced with:

sourceSets {
    val jvmMain by getting {
        dependencies {
            configurations["liquibaseRuntime"].dependencies.addAll(listOf(
                DefaultExternalModuleDependency("org.liquibase", "liquibase-core", null, "default"),
                DefaultExternalModuleDependency("org.liquibase.ext", "liquibase-hibernate5", "3.8", "default"),
                DefaultExternalModuleDependency("org.postgresql", "postgresql", null, "default"),
                DefaultExternalModuleDependency("org.springframework.boot", "spring-boot", "2.2.4.RELEASE", "default")
    //          DefaultSelfResolvingDependency(configurations["compileClasspath"])
            ))

I've got stuck with these two and don't know what to do:

liquibaseRuntime(sourceSets.getByName("main").compileClasspath)
liquibaseRuntime(sourceSets.getByName("main").output)

They add instances of the dependency class DefaultSelfResolvingDependency (they also seem to be wrapped with some proxy). Looking through the liquibase-gradle plugin code didn't help.

So, how should I port these two dependencies?

like image 424
night-crawler Avatar asked Oct 18 '25 19:10

night-crawler


1 Answers

Not familiar with with the Liquibase Gradle plugin. My assumption is you have applied the plugin in the following manner:

plugins {
    id("org.liquibase.gradle") version "2.0.2"
}

Then you should be able to do what you have normally:

dependencies {
    liquibaseRuntime("org.liquibase:liquibase-core")
    liquibaseRuntime("org.liquibase.ext:liquibase-hibernate5:3.8")
    liquibaseRuntime("org.postgresql:postgresql")
    liquibaseRuntime("org.springframework.boot:spring-boot:$springBootVersion")
}

If for some reason that didn't work out-of-the-box, then you need to help Gradle's Kotlin DSL by explicitly retrieving a reference of the configuration:

val liquibaseRuntime by configurations

dependencies {
    liquibaseRuntime("org.liquibase:liquibase-core")
    liquibaseRuntime("org.liquibase.ext:liquibase-hibernate5:3.8")
    liquibaseRuntime(sourceSets.getByName("main").compileClasspath)
    liquibaseRuntime(sourceSets.getByName("main").output)
    liquibaseRuntime("org.postgresql:postgresql")
    liquibaseRuntime("org.springframework.boot:spring-boot:$springBootVersion")
}

You could also do the following as well:

dependencies {
    "liquibaseRuntime"("org.liquibase:liquibase-core")
    "liquibaseRuntime"("org.liquibase.ext:liquibase-hibernate5:3.8")
    // ...
}

Reference: Understanding what to do when type-safe model accessors are not available

Now these two lines do not make sense to me.

liquibaseRuntime(sourceSets.getByName("main").compileClasspath)
liquibaseRuntime(sourceSets.getByName("main").output)

According to the API documentation for DependencyHandler, there are certain allowed notations. A sourceSet is not one of them. So not sure what to do there.

like image 93
Francisco Mateo Avatar answered Oct 20 '25 13:10

Francisco Mateo