Gradle构建文件Liquibase配置报错:'main'无法作为函数调用
错误原因与解决方法
错误原因
你使用的是Gradle Kotlin DSL,但直接照搬了Liquibase插件的Groovy DSL配置写法。在Kotlin DSL中,liquibase.activities是NamedDomainObjectContainer类型的容器,Kotlin作为静态类型语言,不允许像Groovy那样通过main {}这种动态函数调用的方式创建Activity。此时Gradle会把main误识别为源码集上下文的对象,导致类型不匹配、属性无法解析的一系列错误。
解决方法
修改liquibase配置块,调用容器的create()方法来定义Activity,替换原来的main {}写法。修改后的配置如下:
liquibase { activities { create("main") { changeLogFile = "some/url/to/changelog/yaml/file" url = "jdbc:mysql://localhost:3306/someDatabase" username = "some-user" password = "some-password" } } }
完整修改后的build.kts示例
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.liquibase.gradle") version "2.2.1" kotlin("jvm") version "1.9.23" // Spring Boot项目建议添加以下插件,自动处理版本依赖兼容 id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.4" } java { sourceCompatibility = JavaVersion.VERSION_21 } repositories { mavenCentral() maven { url = uri("https://repo.spring.io/milestone") } } dependencies { implementation("org.springframework.boot:spring-boot-starter") implementation("org.liquibase:liquibase-core") runtimeOnly("com.mysql:mysql-connector-j") implementation("org.jetbrains.kotlin:kotlin-reflect") } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs += "-Xjsr305=strict" jvmTarget = "21" } } liquibase { activities { create("main") { changeLogFile = "some/url/to/changelog/yaml/file" url = "jdbc:mysql://localhost:3306/someDatabase" username = "some-user" password = "some-password" } } }
额外提示
- 添加Spring Boot插件和依赖管理插件后,无需手动指定Liquibase等依赖的版本,插件会自动维护版本兼容性。
- 配置完成后,可通过
./gradlew update命令执行Liquibase变更脚本。
内容的提问来源于stack exchange,提问作者DarkNetFan
相关产品推荐
相关产品推荐

