You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kotlin DSL开发Gradle插件配置任务时的报错如何解决?

错误原因

  • 普通Gradle Kotlin构建脚本(.kts)里支持的withType<JavaCompile> { 配置逻辑 }是Kotlin DSL提供的专属扩展语法,插件开发的纯Kotlin源码环境默认不导入对应扩展,withType()方法仅接受Class类型参数,无法直接传入配置Lambda,所以触发类型不匹配报错。
  • 因为前面的参数类型不匹配,编译器无法识别Lambda内的上下文是JavaCompile任务对象,所以找不到options属性,触发未定义引用报错。
  • Groovy里的warning属性对应Kotlin中的isWarning,Kotlin会自动将布尔类型的Java Bean属性转换为is前缀的命名格式,直接写warning会触发变量预期的报错。

正确实现代码

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.compile.JavaCompile

class JavaConventionsPlugin : Plugin<Project> {
    // 其他逻辑省略
    fun configureBasicJavaOptions(project: Project) {
        project.tasks.withType(JavaCompile::class.java).configureEach { compileTask ->
            compileTask.options.encoding = "cp1252"
            compileTask.options.isWarning = false
        }
    }
}

可选泛型写法说明

如果你的插件项目已经引入了Gradle Kotlin DSL扩展依赖,也可以用更简洁的泛型写法:

project.tasks.withType<JavaCompile>().configureEach {
    options.encoding = "cp1252"
    options.isWarning = false
}

内容的提问来源于stack exchange,提问作者Brad Mace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:45:02