我有一个包含多个子项目的gradle项目。我想定义一个带有默认实现的“准备”任务(例如生成散列,复制文件类型的东西),但有些子项目可能会被更复杂的实现覆盖。
本质上,有些项目更多的是支持性的角色,有些项目包含潜在的可部署性,“准备”的含义取决于子项目。
然而,这种天真的方法在我为所有人定义任务,然后试图在子项目中覆盖它的情况下不起作用,它告诉我任务已经定义了。
以前,有一个tasks.replace()
可以完成这项工作,但它已经从Gradle中删除了。现在您如何做同样的工作?
main build.gradle:
subprojects {
task prep {
.. some default behavior
}
}
subproject build.gradle:
task prep {
.. a subproject specific prep behavior
}
字符串
1条答案
按热度按时间qlzsbp2j1#
修改任务配置
您可以添加和修改现有任务的配置。最简单的方法是编写:
字符串
它是使用Groovy API在
prep
Task
上调用方法Task.configure()
的简写。不幸的是,这确实会触发任务的配置,如果你没有在任何给定的构建上运行
prep
,这是浪费的。为了保持懒惰,以便只在需要prep
时执行配置,你可以写:型
那怎么办?
然后你可以访问的API并不像在类中重写一个方法那样流畅,但是你可以对这个任务做很多事情(docs for Task object):
1.使用
doFirst
和doLast
向基本任务添加其他操作;1.通过访问、删除和修改
actions
List
属性对任务操作进行更深层次的更改(例如actions.clear()
将删除所有现有的任务操作);1.更改任务操作所依赖的其他任务属性。这可能需要单独创建或修改定义任务的基础类(将应用于任务的所有示例)(docs)。
因此,要完全替换
prep
,您可以编写:型