有条件地将任务添加到gradle中的任务树

时间:2014-01-13 16:11:05

标签: gradle

我有一个Gradle插件,其中包含一些配置约定。

myplugin {
  doSomethingOnBuild = true/false
}

在插件源代码中,我使用doSomethingOnBuild有条件地将任务(postProcessTask)添加到任务树。任务有条件的原因是postProcessTask仅对某种类型的构建是必需的。

projects.gradle.projectsEvaluated {
  if(convention.doSomethingOnBuild == true) {
    // add postProcessTask to tree using dependsOn
  }
}

我觉得使用doSomethingOnBuild很奇怪,因为我需要将它包装在project.gradle.projectsEvaluated中,以便在配置阶段使用约定参数,并且gradle还警告我有关动态属性的使用(不推荐使用)

有更好的方法吗?我根本不应该这样做吗?用户是否可以调用postProcessTask?

1 个答案:

答案 0 :(得分:1)

有条件地添加任务并不常见,但如果没有更多的上下文,我不能说我是否会选择这个或另一个解决方案(添加descriptiongroup任务,拆分成多个插件等)。在任何情况下,插件推迟对构建模型的访问都是正常的,而且通常是强制性的,gradle.projectsEvaluated确实是一种方法。

关于“按需创建属性”的警告,这意味着有人在doSomethingOnBuild项目上设置了名为:Test的属性,尽管没有声明此类属性。这可能暗示插件存在问题,或者有人试图在应用插件之前设置属性。

如果您在严格的Gradle意义上引用约定对象,请注意它们已基本上被扩展对象替换。您可以在Gradle User Guide中详细了解有关扩展程序的信息。 (但这并不能解释弃用警告。)