【发布时间】:2018-04-21 21:50:12
【问题描述】:
我想在运行 gradle build 时跳过一些任务。我知道可以使用-x从命令行完成:
gradle build -x unwantedTask
我的问题是如何在 build.gradle 中实现相同的结果?
【问题讨论】:
-
我认为您不能在 gradle 文件中编辑
build任务。您需要创建自己的任务。
标签: android gradle build.gradle
我想在运行 gradle build 时跳过一些任务。我知道可以使用-x从命令行完成:
gradle build -x unwantedTask
我的问题是如何在 build.gradle 中实现相同的结果?
【问题讨论】:
build 任务。您需要创建自己的任务。
标签: android gradle build.gradle
你可以试试例如:
unwantedTask.enabled = false
【讨论】:
-x 选项不同,但它应该会产生所需的行为。只能在settings.gradle 中通过startParameter.excludedTaskNames 排除任务。
因为我需要禁用一堆任务,所以我在我的build.gradle文件中在apply plugin:之前使用了以下代码:
tasks.whenTaskAdded {task ->
if(task.name.contains("unwantedTask")) {
task.enabled = false
}
}
【讨论】:
startScripts 或 distZip)。
subprojects { ... } 中,并将其放入根项目build.gradle。
对于更通用的方法,您可以:
unwantedTask.onlyIf { <expression> }
例如:
compileJava.onlyIf { false }
高级 IDE,如 IDEA,通过代码完成,将为您提供很多您可以对 build.gradle 中的任何给定对象执行的操作 - 毕竟它只是一个 Groovy 脚本。
【讨论】:
正如@LukasKörfer 在评论中所暗示的那样,要真正从构建中删除任务,而不是仅仅跳过它,一种解决方案是将其添加到您的构建脚本中:
project.gradle.startParameter.excludedTaskNames.add('yourTaskName')
但这似乎删除了所有子项目的任务。
【讨论】:
excludedTaskNames 的任何名称的解释方式与通过命令行传递给 Gradle 的任务相同。任务名称('yourTaskName')表示所有(子)项目中具有该名称的所有任务,而任务路径(':yourTaskName' 或 ':yourProject:yourTaskName')表示单个任务。