为了以最简单的方式解释我的问题,我将首先向您展示一个有效的 Groovy 脚本,然后添加一些破坏它的 Gradle 酱汁。
工作脚本:
class MyMixin {
String myname = 'max'
}
@Mixin(MyMixin)
class MyClass {}
MyClass c = new MyClass()
println 'hello ' + c.myname
这会按预期打印出“hello max”。现在让我们MyClass
用 Gradle 任务类替换它。为此,我们扩展DefaultTask并使用@TaskAction
注释。
@Mixin(MyMixin)
class MyTask extends DefaultTask {
@TaskAction
void sayHello() {
println 'hello ' + myname
}
}
如果我们现在安装这个 Gradle 任务并执行它,我们会收到以下运行时错误:
Execution failed for task ':myproject:mytask'.
> MyTask.getMyname()Ljava/lang/String;
有趣的是,这只发生在返回某些东西的方法上。void
方法执行得很好。
所以问题很简单:我怎样才能让我的 mixin 与我的 Gradle 任务合作?(仅供参考:它似乎与继承无关;我检查了这一点,但没有将其包含在示例脚本中以保持简单。我还使用运行时混合而不是编译时进行了测试:结果是相同)。