为了以最简单的方式解释我的问题,我将首先向您展示一个有效的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任务配合? (仅供引用:它似乎与继承无关;我进行了检查,但未将其包含在示例脚本中以使其保持简单。我还使用运行时mixin而不是编译时进行了测试:结果是一样的)。
最佳答案
我在Gradle论坛上发布了相同的问题,根据Gradle开发人员的说法,这是Groovy的@Mixin
与Gradle自己的元编程工具之间的不兼容。他们建议改用Gradle的额外属性和/或扩展对象。
供引用:http://forums.gradle.org/gradle/topics/groovy_mixin_combined_with_gradle_defaulttask_results_in_runtime_error
关于groovy - Groovy mixin与Gradle DefaultTask结合使用会导致运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10754525/