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

标签 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中,以便在配置阶段可以使用Conventional参数,并且gradle还会警告我有关动态属性的使用(已弃用)

有一个更好的方法吗?我不应该这样做吗?是否由用户来调用postProcessTask?

最佳答案

有条件地添加任务并不是很常见,但是没有更多的上下文,我不能说我是否愿意使用此解决方案或其他解决方案(为任务添加descriptiongroup,分为多个插件,等等)。在任何情况下,插件都会推迟对构建模型的访问,这是正常的,并且通常是强制性的,而gradle.projectsEvaluated确实是这样做的一种方法。

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

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

关于gradle - 有条件地将任务添加到gradle的任务树中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21095942/

相关文章:

java - Gradle 来自源的非托管依赖项

android - Gradle 无法通过 Nexus 解决依赖关系,但会在浏览器中下载 Artifact

android - 如何删除 Gradle 冲突

gradle - 如何使用 Gradle 编译 Kotlin 域模块和客户端模块?

groovy - 在Gradle子项目中找不到属性

android - 如何在没有 android studio 的情况下更新 gradle?

Spring - 使用属性扩展(processResources)并在application.yml文件中使用属性引用时发生冲突

android - jitpack无法解析库

java - 使用 Gradle 将 WAR 文件发布到 Maven Repo

gradle - 如何解决:Android Gradle插件仅支持Kotlin Gradle插件1.3.10及更高版本。