Gradle Kotlin DSL配置enforcedPlatform排除依赖报错求助
解决Kotlin DSL中enforcedPlatform排除依赖的编译错误
Groovy语法的build.gradle中,你可能是这么写的:
implementation enforcedPlatform("org.springframework.boot:spring-boot-dependencies:3.2.0") { exclude group: 'ch.qos.logback', module: 'logback-core' exclude group: 'ch.qos.logback', module: 'logback-classic' }
切换到Kotlin DSL的build.gradle.kts时,不能直接用exclude("ch.qos.logback", "logback-core"),因为Kotlin是静态类型语言,Gradle的Kotlin DSL对exclude方法的参数要求更严格,不支持位置传参的简写形式,必须用命名参数或者lambda表达式指定排除规则。
正确写法1:使用命名参数
implementation(enforcedPlatform("org.springframework.boot:spring-boot-dependencies:3.2.0")) { exclude(group = "ch.qos.logback", module = "logback-core") exclude(group = "ch.qos.logback", module = "logback-classic") }
正确写法2:使用lambda表达式
implementation(enforcedPlatform("org.springframework.boot:spring-boot-dependencies:3.2.0")) { exclude { group = "ch.qos.logback" module = "logback-core" } exclude { group = "ch.qos.logback" module = "logback-classic" } }
全局排除(可选)
如果需要在所有配置中排除logback模块,可以在build.gradle.kts顶部添加:
configurations.all { exclude(group = "ch.qos.logback", module = "logback-core") exclude(group = "ch.qos.logback", module = "logback-classic") }
错误原因
Groovy作为动态语言,允许通过位置参数简写exclude的group和module;而Kotlin是强类型语言,Gradle的Kotlin DSL中exclude方法的重载版本不接受两个字符串参数,必须明确指定group和module的命名参数,或者通过lambda构建排除规则对象,否则会触发“无匹配调用函数”的编译错误。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

