如何禁用 build.gradle 中的任务

Posted

技术标签:

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

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

gradle build -x unwantedTask 

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

【问题讨论】:

我认为您不能在 gradle 文件中编辑 build 任务。您需要创建自己的任务。 【参考方案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')表示单个任务。

以上是关于如何禁用 build.gradle 中的任务的主要内容,如果未能解决你的问题,请参考以下文章

gradle中的build script详解

开始使用gradle

Gradle build.gradle 到 Maven pom.xml

如何将 gradle 中的 groovy 任务转换为 Gradle Kotlin DSL 以生成 pom.xml?

如何调试 Gradle build.gradle 文件(在调试器中,带有断点)?

Could not find tools.jar when build gradle project