自定义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",为什么我需要它或不?

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

子类化具体的任务类型,如Copy,很少是必要的/合适的。而不是实现一个任务类型,如MyCopyTask,考虑实现一个插件,添加一个Copy类型的任务,或者一个任务类型,不继承Copy,但调用project.copy()在其任务操作(复合继承)。

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

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

最新更新