如何在build.gradle中禁用任务

NO1*_*127 24 android gradle build.gradle

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

gradle build -x unwantedTask 
Run Code Online (Sandbox Code Playgroud)

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

Opa*_*pal 23

您可以尝试例如:

unwantedTask.enabled = false
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将跳过任务,这与使用`-x`选项不同,但它应该导致所需的行为.只能通过`startParameter.excludedTaskNames`在`settings.gradle`中排除任务. (3认同)

NO1*_*127 20

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

tasks.whenTaskAdded {task ->
    if(task.name.contains("unwantedTask")) {
        task.enabled = false
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 没用。该任务仍然出现在 gradle 列表中:( (2认同)

Ond*_*žka 17

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

unwantedTask.onlyIf { <expression> }
Run Code Online (Sandbox Code Playgroud)

例如:

compileJava.onlyIf { false }
Run Code Online (Sandbox Code Playgroud)

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


Vic*_*yew 12

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

project.gradle.startParameter.excludedTaskNames.add('yourTaskName')
Run Code Online (Sandbox Code Playgroud)

然而,这似乎删除了所有子项目的任务。

  • 添加到“excludedTaskNames”的任何名称的解释方式与通过命令行传递到 Gradle 的任务相同。任务名称(“yourTaskName”)代表所有(子)项目中具有该名称的所有任务,而任务路径(“:yourTaskName”或“:yourProject:yourTaskName”)代表单个任务。 (4认同)