如何在 Kotlin/Multiplatform 项目中使用 Gradle liquibaseRuntime 配置

3

目前,我正在将我的Spring Boot build.gradle.kts配置移植到Kotlin/MP堆栈中。我不知道该怎么处理liquibaseRuntime配置的一部分。原始配置如下:

// 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")

这个配置的一部分可能可以被替换为:

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"])
            ))

我陷入了两个问题中,不知道该怎么办:
liquibaseRuntime(sourceSets.getByName("main").compileClasspath)
liquibaseRuntime(sourceSets.getByName("main").output)

他们添加了依赖类 DefaultSelfResolvingDependency 的实例(它们似乎还被某些代理包装)。查看 liquibase-gradle 插件代码并没有帮助。

那么,我应该如何移植这两个依赖项呢?

1个回答

3

我猜你对Liquibase Gradle插件不太熟悉。我的假设是你是按照以下方式应用了该插件:

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

然后你应该能够像平常一样做你想做的事情:

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")
}

如果某些原因导致此方法无法开箱即用,那么您需要通过显式检索 configuration 的引用来帮助 Gradle 的 Kotlin DSL。
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")
}

你也可以这样做:

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

现在这两行对我来说没有意义。参考:了解当类型安全的模型访问器不可用时该怎么做
liquibaseRuntime(sourceSets.getByName("main").compileClasspath)
liquibaseRuntime(sourceSets.getByName("main").output)

根据DependencyHandler的API文档,有一些允许的符号。但sourceSet不在其中。所以不确定该怎么办。

你说得对。我可以使用标准的dependencies处理程序。不管怎样,liquibase仍然无法启动,但这个问题与这个问题无关。谢谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接