groovy - Groovy mixin与Gradle DefaultTask结合使用会导致运行时错误

标签 groovy gradle mixins

为了以最简单的方式解释我的问题,我将首先向您展示一个有效的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/

相关文章:

android-studio - 如何修复AAPT:错误:找不到资源android:attr/fontVariationSettings?

css - 更少的 css 嵌套?

groovy - Elasticsearch -正常查询有效,但Fuzzy_like_this无效(使用function_score)

java - 如何将 Gradle Proguard 插件用作 Maven 存储库依赖项? (不引用本地文件夹。)

database - Grails动态数据库连接?

testing - 使用 gradle 测试时未找到给定的测试包括

java - 将 Jackson 与泛型类型一起使用

python - Django - 模型 mixin 无法按预期工作

eclipse - 如何调试Grails命令

javascript - 如何从 javascript 中的服务器响应下载 XLSX 文件?