zoukankan      html  css  js  c++  java
  • gradle中的task

    在看文章之前,希望知其所以然的同学肯定希望能看到gradle相关的api,那么先行奉上gradle api的链接:

    https://docs.gradle.org/current/javadoc/allclasses-noframe.html

    由于gralde使用的是groovy语言,所以语法看上去比较奇怪,好像描述性语言一样,不过,这对于创建一个工程来说已经足够了。

    同其他的语言一样,groovy语言也有很多关键字,也有类型,task也是groovy语言中的一个类,配合内部的一些属性方法和固有的关键字,我们可以写出形形色色的task,来帮助我们做一些自动化的操作。

    创建一个最简单的task应该是这样的:

    task print{
       print 'hello world'
    }

    task还提供了设置多个task之间的相互依赖关系,就可以用dependson关键字,如果任务不是你定义的,而是系统定义的,你想指定运行的先后顺序,也可以用mustRunAfter指定

    task a(dependson:taskb){//可以写在括号内
        println "i am a"
    }
    
    task a(dependson:[taskb,taskc]){//也可以以数组的形式依赖多个数组
        println "i am a"
    }
    task a{//也可以分开写
        println "i am a"
        dependson taskb
        dependson taskc
    }
    build.mustRunAfter clean//android studio为我们定义好的task build 和clean  我们可以拿来直接使用

    更进一步,配合上最常用的doFirst,doLast和dependson我们可以写出以下四个task

    task task2{
    println "task2"
    }

    task task3{
    println "task3"
    }

    task task4{
    println "task4"
    }

    task task1(dependsOn:[task2,task3,task4]){
    println "task1"
    doFirst{
    println "task1 first"
    }
    doLast{
    println "task1 last"
    }
    }
    task1 <<{
    println "task1 append"
    }
    //输出结果
    task2
    task3
    task4
    task1
    task1 first
    task1 last
    task1 append

     可以看到,优先顺序为depensOn>自己>doFirst>doLast> ">>符号"

     不只是顺序,使用标准的task api,我们可以创建形形色色的任务,完成我们的需求

    task showTasks{
       println tasks.class
       println tasks.size()
    }
    //output
    class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
    15//可以看到,tasks.size()是build下的任务总数,但其实,目录中所有的任务都是project的任务,详情见附图
    例如 你想在project build之前做一些拷贝so的操作:
    project.preBuild.doFirst{
    delete "../sdk/src/main/jniLibs/arm64-v8a"
    copy{
    from "../models/armeabi-v7a"
    include "**.so"
    into "../sdk/src/main/jniLibs/armeabi-v7a"
    rename {
    String fileName ->
    "libss.so"
    }
    }
    }//执行gradle preBuild时候,就会执行拷贝文件的操作

    task hello {
    doFirst{
    println description//输出this is hello
    }
    }

    hello.configure {//定义hello的属性
    description = "this is hello"
    }
    但如果修改hello的定义为如下:
    task hello {
    println description //输出null,可以看到description的定义要在默认体和doFirst之间
    }

     常用的基本是这么多,如果有进一步需求,可以参考官方api

  • 相关阅读:
    SQL INNER JOIN
    SQL JOIN
    SQL OUTER JOIN
    SQL CROSS JOIN
    SQL 基础:Select语句,各种join,union用法
    Morton Code
    vs 字体
    sql 语言
    sqllite3
    linux怎么区别文本文件和二进制文件
  • 原文地址:https://www.cnblogs.com/gangmiangongjue/p/7652918.html
Copyright © 2011-2022 走看看