前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android Gradle 插件】自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )

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

作者头像
韩曙亮
发布2023-03-30 17:08:21
7240
发布2023-03-30 17:08:21
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

Android Plugin DSL Reference 参考文档 :

一、Gradle 任务的输出和输出


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

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

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

在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
/**
 * 自定义任务类
 */
class MyTask extends DefaultTask {

    @Input
    String input

    @OutputFile
    String output

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

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

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

代码语言:javascript
复制
/*
    生成自定义 Gradle 任务
 */
task myTask(type: MyTask){
    //input = 'hello'
    output = 'out.txt'
}

二、@Optional 注解


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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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


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

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

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

代码示例 :

代码语言:javascript
复制
/**
 * 自定义任务类
 */
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’ 字符串 ;

在这里插入图片描述
在这里插入图片描述

第二次执行 : 提示

代码语言:javascript
复制
> Task :app:myTask UP-TO-DATE

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

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Gradle 任务的输出和输出
  • 二、@Optional 注解
  • 二、UP-TO-DATE 避免重复执行任务
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档