【问题标题】:How can I disable a task in build.gradle如何禁用 build.gradle 中的任务
【发布时间】:2018-04-21 21:50:12
【问题描述】:

我想在运行 gradle build 时跳过一些任务。我知道可以使用-x从命令行完成:

gradle build -x unwantedTask 

我的问题是如何在 build.gradle 中实现相同的结果?

【问题讨论】:

  • 我认为您不能在 gradle 文件中编辑 build 任务。您需要创建自己的任务。

标签: android gradle build.gradle


【解决方案1】:

你可以试试例如:

unwantedTask.enabled = false

【讨论】:

  • 请注意,这将跳过任务,这与使用-x 选项不同,但它应该会产生所需的行为。只能在settings.gradle 中通过startParameter.excludedTaskNames 排除任务。
【解决方案2】:

因为我需要禁用一堆任务,所以我在我的build.gradle文件中在apply plugin:之前使用了以下代码:

tasks.whenTaskAdded {task ->
    if(task.name.contains("unwantedTask")) {
        task.enabled = false
    }
}

【讨论】:

  • 太棒了!只有 解决方案适用于并不总是存在的任务(例如 startScriptsdistZip)。
  • 对于所有模块,将其包装在subprojects { ... } 中,并将其放入根项目build.gradle
  • 没用。该任务仍然出现在 gradle 列表中 :(
【解决方案3】:

对于更通用的方法,您可以:

unwantedTask.onlyIf { <expression> }

例如:

compileJava.onlyIf { false }

高级 IDE,如 IDEA,通过代码完成,将为您提供很多您可以对 build.gradle 中的任何给定对象执行的操作 - 毕竟它只是一个 Groovy 脚本。

【讨论】:

    【解决方案4】:

    正如@LukasKörfer 在评论中所暗示的那样,要真正从构建中删除任务,而不是仅仅跳过它,一种解决方案是将其添加到您的构建脚本中:

    project.gradle.startParameter.excludedTaskNames.add('yourTaskName')
    

    但这似乎删除了所有子项目的任务。

    【讨论】:

    • 添加到excludedTaskNames 的任何名称的解释方式与通过命令行传递给 Gradle 的任务相同。任务名称('yourTaskName')表示所有(子)项目中具有该名称的所有任务,而任务路径(':yourTaskName'':yourProject:yourTaskName')表示单个任务。
    猜你喜欢
    • 2018-01-20
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2021-07-18
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多