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

自定义Gradle任务目录属性定义及Groovy DSL配置报错解决

解决Gradle自定义任务目录属性配置错误

错误原因

问题出在Groovy DSL对Gradle Property 类型属性的赋值方式上。直接用 = 赋值会覆盖属性本身的引用,而非设置属性的值,导致Gradle无法识别其自动注入的合法 DirectoryProperty 实例,进而抛出错误。

正确配置方式

你的Kotlin自定义任务类定义完全符合Gradle规范,只需修改Groovy配置代码的赋值逻辑:

方法1:调用set()方法赋值

这是最稳妥的方式,直接调用Property接口的set()方法设置目录值:

def myTask = tasks.register('myTask', FooBarTask) {
    from.set(layout.projectDirectory.dir("foo"))
    to.set(layout.buildDirectory.dir("bar"))
}

方法2:使用Groovy简化赋值语法

Groovy支持省略set前缀的赋值写法,本质和set()方法等价:

def myTask = tasks.register('myTask', FooBarTask) {
    from layout.projectDirectory.dir("foo")
    to layout.buildDirectory.dir("bar")
}

额外说明

你的Kotlin任务类无需修改:

  • 抽象类继承DefaultTask是正确的实现方式
  • 用abstract val定义Property<Directory>属性时,Gradle会自动通过对象工厂(ObjectFactory)生成对应的实现实例
  • @InputDirectory和@OutputDirectory注解能让Gradle正确追踪任务输入输出,实现增量构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:05:38