【Android Gradle 插件】自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )

Android Plugin DSL Reference 参考文档 :





一、Gradle 任务的输出和输出



Gradle 任务通常都有 输入 和 输出 内容 ;

如 : other 分组下的 compileDebugJavaWithJavac 任务 , 该任务的主要作用是 使用 javac 编译器工具 将 Java 源代码文件 编译成 Class 字节码文件 ;

则上述任务的 输入 为 Java 源代码文件 , 输出 为 Class 字节码文件 ;

在这里插入图片描述

可以使用 @Input 和 @Output 注解的形式 , 设置 Gradle 任务的 输入 和 输出 ;

/**
 * 自定义任务类
 */
class MyTask extends DefaultTask {
    
    

    @Input
    String input

    @OutputFile
    String output

    MyTask() {
    
    
        // 设置该任务属于 MyTaskGroup 分组
        group 'MyTaskGroup'
        description 'MyTask Description'
    }

    /**
     * 使用 @TaskAction 注解指定任务需要执行的方法
     */
    @TaskAction
    void run() {
    
    
        println 'MyTask'
    }
}

设置了注解后 , 可以在创建 Task 任务时的配置阶段 , 为 输入 和 输出 设置对应的值 ;

/*
    生成自定义 Gradle 任务
 */
task myTask(type: MyTask){
    
    
    //input = 'hello'
    output = 'out.txt'
}




二、@Optional 注解



Gradle 任务的 输入 和 输出 值 , 一般不能为空 , 否则直接报错 ;

如果将 输入 和 输出 属性使用 @Optional 修饰 , 则对应的 输入 或 输出 属性 可以为空 ;

在这里插入图片描述

添加了 @Optional 注解后 , 输入 即使为空 , 也不会报错 ;

在这里插入图片描述





二、UP-TO-DATE 避免重复执行任务



Gradle 任务的 输入 和 输出 是任务是否执行的标志 , 可以避免 Gradle 任务被重复执行 ;

如果 Gradle 任务执行完毕后 , 有了一个 输入 和 输出 值 ;

再次执行该 Gradle 任务 , 如果 输入 和 输出 值 没有变化 , 则该任务就会被提示 UP-TO-DATE , 不再执行该任务 ;


代码示例 :

/**
 * 自定义任务类
 */
class MyTask extends DefaultTask {
    
    

    @Input
    @Optional
    String input

    @OutputFile
    String output

    MyTask() {
    
    
        // 设置该任务属于 MyTaskGroup 分组
        group 'MyTaskGroup'
        description 'MyTask Description'
    }

    /**
     * 使用 @TaskAction 注解指定任务需要执行的方法
     */
    @TaskAction
    void run() {
    
    
        println 'MyTask'
    }
}

/*
    生成自定义 Gradle 任务
 */
task myTask(type: MyTask){
    
    
    input = 'hello'
    output = 'out.txt'
}

第一次执行 : 正常执行 Gradle 任务 , 执行了 MyTask 任务类中的 run 方法 , 打印了 ‘MyTask’ 字符串 ;

在这里插入图片描述

第二次执行 : 提示

> Task :app:myTask UP-TO-DATE

内容 , 说明输入和输出与上一次执行相同 , 本次不再重复执行 ;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/127015314