自定义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
相关产品推荐
相关产品推荐

