我正在为多模块项目编写一些gradle插件。其中一些正在引入任务,这些任务应被视为复制任务。当然他们会复制副本,但也有其他一些东西。
我的问题是更普遍的问题。我是否必须编写一个自己的任务操作方法来调用超级任务操作?或者gradle会自动调用超类的任务操作吗? 坚持复制任务:
class MyCopyTask extends Copy {
public MyCopyTask () {
super()
from "just/a/default/path"
into "another/default/path"
}
@TaskAction
def myCopy() {
super.copy()
}
}
有人可以向我解释gradle如何决定在执行阶段执行哪些方法。我是否需要方法" myCopy"为什么我需要它?
答案 0 :(得分:4)
每个具体的任务类都需要有一个用@TaskAction
注释的方法,当要执行任务时,Gradle将调用该方法。使用@TaskAction
注释的超级方法将不会被调用。
对Copy
等具体任务类型进行子类化很少是必要/适当的。不要实现MyCopyTask
之类的任务类型,而应考虑实现一个插件,该插件添加类型为Copy
的任务,或者不从Copy
继承但调用{{}的任务类型1}}在其任务操作中(组合而不是继承)。
答案 1 :(得分:0)
除@TaskAction
批注外,自定义gradle类也继承了gradle批注。例如,如果您创建了一个定义输入的抽象任务,则可以在抽象类中用@Input
注释这些输入,在类级别添加一个@CacheableTask
,然后任何扩展它的类都将继承那些输入作为缓存的一部分。
这也适用于接口,例如插件。