自定义gradle任务中注解的继承

The*_*End 3 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释 gradle 如何决定在执行阶段执行哪些方法。我是否需要“myCopy”方法,为什么需要或不需要?

Pet*_*ser 5

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

子类化具体的任务类型,例如Copy很少需要/合适。与其实现诸如 之类的任务类型,不如MyCopyTask考虑实现一个插件,该插件添加一个类型Copy为 的任务,或一个不从其继承Copyproject.copy()在其任务操作(继承上的组合)内部调用的任务类型。