如何禁用 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
【讨论】:
太棒了!只有 此 解决方案适用于并不总是存在的任务(例如startScripts
或 distZip
)。
对于所有模块,将其包装在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.gradle 到 Maven pom.xml
如何将 gradle 中的 groovy 任务转换为 Gradle Kotlin DSL 以生成 pom.xml?