在自定义gradle任务中继承注释

时间:2014-07-28 13:04:16

标签: groovy gradle

我正在为多模块项目编写一些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"为什么我需要它?

2 个答案:

答案 0 :(得分:4)

每个具体的任务类都需要有一个用@TaskAction注释的方法,当要执行任务时,Gradle将调用该方法。使用@TaskAction注释的超级方法将不会被调用。

Copy等具体任务类型进行子类化很少是必要/适当的。不要实现MyCopyTask之类的任务类型,而应考虑实现一个插件,该插件添加类型为Copy的任务,或者不从Copy继承但调用{{}的任务类型1}}在其任务操作中(组合而不是继承)。

答案 1 :(得分:0)

@TaskAction批注外,自定义gradle类也继承了gradle批注。例如,如果您创建了一个定义输入的抽象任务,则可以在抽象类中用@Input注释这些输入,在类级别添加一个@CacheableTask,然后任何扩展它的类都将继承那些输入作为缓存的一部分。

这也适用于接口,例如插件。