检索自定义插件中的conventionMapping

时间:2014-08-19 09:29:54

标签: gradle

我正在编写一个使用我的自定义扩展程序对象的gradle自定义插件。我明白我必须使用conventionMapping来懒惰地评估来自this SO answergradle forum的扩展对象值。

当我尝试使用普通的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,我认为我应该扩展它,但不幸的是这些事实让我感到困惑:

  1. ConventionTask包是内部的
  2. DefaultTask使用@NoConventionMapping
  3. 进行注释

    我还发现this thread说我不应该约定。 所以我的问题是,ConvenMapping仍然是编写使用扩展的插件的正确方法吗?如果是,那么在没有gradle dsl魔法的情况下检索它们的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

会议映射是当前可用于解决"延迟配置的最强大的解决方案。问题,但它被认为是一个内部功能。在某些时候,它会偏向于新的配置模型(这将是一个公共功能)。同时,另一种解决方案是解决"延迟配置"问题是使用project.afterEvaluate { ... }之类的回调。