我正在编写使用自定义扩展对象的gradle自定义插件。我知道我必须使用ConventionMapping懒惰地从此SO Answer and Gradle论坛中评估扩展对象的值。
当我尝试使用普通的Gradle API(而不是DSL API)编写插件时,就会发生问题。我认为我想这样做是因为它对IDE更友好。因此,任务创建是这样完成的:
MyTask task = project.tasks.create("mytask", MyTask)
task.?conventionMapping? ..
代替
project.task(type:MyTask) {
conventionMapping.field = ..
}
MyTask正在扩展DefaultTask,因此它没有ConventionMapping字段。然后我发现Gradle的Java插件中的一些Task实现正在扩展ConventionTask,我认为我应该从中扩展,但是不幸的是,这些事实使我再次感到困惑:
我还发现此线程说我不应该约定。所以我的问题是,ConventionMapping仍然是编写使用扩展插件的正确方法吗?如果是,在没有gradle dsl魔术的情况下检索它们的正确方法是什么?
约定映射是当前可用于解决“延迟配置”问题的最强大的解决方案,但它被视为内部功能。在某些时候,它将不再支持新的配置模型(它将是一个公共功能)。同时,解决“延迟配置”问题的另一种解决方案是使用诸如的回调project.afterEvaluate { ... }
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句