如何提供渐变任务的@Nested属性的值



渐变文档描述了自定义渐变任务的@Nested注释:https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:task_input_output_annotations

不幸的是,就如何在build.gradle文件中使用这一机制而言,还没有完整的例子。我创建了一个项目来演示每当gradle配置项目时发生的一个奇怪的异常:https://github.com/NicolasRouquette/gradle-nested-property-test

build.gradle有以下内容:

task T(type: NestedTest) {
tool = file('x')
metadata = {
a = "1"
}
}

NestedTest自定义任务位于buildSrc文件夹中:

class NestedTest extends DefaultTask {
@InputFile
public File tool
@Nested
@Input
public Metadata metadata
@TaskAction
def run() throws IOException {
// do something...
}
}

重要的一点是@Nested属性,它的类型非常基本:

class Mlang-groovyetadata {
String a
}

当我执行以下操作时:./gradlew tasks,我得到的是:

Build file '/opt/local/github.me/gradle-nested-property-test/build.gradle' line: 26
* What went wrong:
A problem occurred evaluating root project 'gradle-nested-property-test'.
> Cannot cast object 'build_6wy0cf8fn1e9nrlxf3vmxnl5z$_run_closure4$_closure5@2bde737' with class 'build_6wy0cf8fn1e9nrlxf3vmxnl5z$_run_closure4$_closure5' to class 'Metadata'

有人能解释一下正在发生的事情以及如何做到这一点吗?

  • 尼古拉斯
查看Gradle源代码中的单元测试,我发现@Nested属性的语法需要调用build.gradle文件中的类型构造函数。

也就是说,以下工作:

task T(type: NestedTest) {
tool = file('x')
metadata = new Metadata(
a: "1"
)
}

最新更新