【问题标题】:Conditionally add task to task tree in gradle有条件地将任务添加到 gradle 中的任务树
【发布时间】:2014-01-13 16:11:04
【问题描述】:

我有一个带有一些配置约定的 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?

【问题讨论】:

  • 确切的警告是什么?
  • 按需创建属性(也称为动态属性)已被弃用,并计划在 Gradle 2.0 中删除。请阅读gradle.org/docs/current/dsl/… 了解有关替换动态属性的信息。不推荐使用的动态属性:“项目':Test'”上的“doSomethingOnBuild”,值:“true”。

标签: gradle


【解决方案1】:

有条件地添加任务并不是很常见,但是如果没有更多上下文,我不能说我会选择这个解决方案还是其他解决方案(为任务添加 descriptiongroup,拆分为多个插件等)。无论如何,插件延迟对构建模型的访问是正常的,而且通常是强制性的,gradle.projectsEvaluated 确实是这样做的一种方式。

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

如果您指的是严格的 Gradle 意义上的约定对象,请注意它们已在很大程度上被扩展对象所取代。您可以在Gradle User Guide 中了解有关扩展的更多信息。 (不过,这并不能解释弃用警告。)

【讨论】:

  • 谢谢!我的一个约定有拼写错误,因此出现了已弃用的动态属性问题(它没有出现在其他约定中)。该插件确实使用约定对象,但这些是在我之前编写的,我读到它们被扩展对象替换但没有机会重构。
猜你喜欢
  • 2014-03-30
  • 2015-07-08
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多