Gradle之Task操作

作者: 奔跑吧李博 | 来源:发表于2023-11-20 23:58 被阅读0次
    各种Task操作:
    //task依赖
    task hello {
        println 'Hello world!'
    }
    task fine(dependsOn: hello) {
        println 'I am fine'
    }
    //打印 Hello world!  I am fine
    
    //任务执行开始、结束的代码执行
    task firstLast {
        doLast {
            println "doLast"
        }
        doFirst {
            println "doFirst"
        }
    }
    
    //自定义任务属性,用ext声明
    task myTask {
        ext.myProperty = "myValue"
    }
    task printTaskProperty {
        println(myTask.myProperty)
    }
    //打印  myValue
    
    //定位 tasks
    task location {
        //通过属性获取task
        println(project.hello.name)
        //通过tasks 集合 获取 task
        println(tasks['hello'].name)
    }
    //打印  hello  hello
    
    //配置一个任务 - 通过闭包 closure
    task myCopy(type: Copy)
    myCopy {
        println("myCopy task")
    }
    //打印  myCopy task
    
    // "must run after" 和 "should run after".
    task taskX {
        println 'taskX'
    }
    task taskY {
        println 'taskY'
    }
    taskX.mustRunAfter taskY
    taskX.shouldRunAfter taskY
    //打印 taskX  taskY
    
    //给任务加入描述
    task description {
        description '这是一个task的description'
        println description
    }
    //打印 这是一个task的description
    
    //抛出一个RuntimeException异常
    task stopException {
    //    throw new RuntimeException()
    }
    
    //激活和注销 tasks
    task disableMe {
        println 'disableMe'
    }
    disableMe.enabled = false
    
    //通过 gradle.properties 文件设置属性
    task printProperties {
        println gradlePropertiesProp  //gradle属性
        println System.properties['system']  //system属性
    }
    //打印 gradlePropertiesValue   systemValue
    
    //采用 Project.task(String name) 方法来创建
    project.task("myTask3").doLast {
        println "doLast in task3"
    }
    
    //task类型:  包括 Copy Delete
    task copyFile(type: Copy) {
        from 'xml'
        into 'destination'
    }
    
    //自定义Task
    //使用自定义task,并通过constructorArgs参数来指定构造函数的参数值
    task hello1(type: SayHelloTask, constructorArgs:[30]) {
        destDir = file("$buildDir/outputFile")
        sayHello() //在task中调用该task的方法
    }
    task hello2(type: SayHelloTask, constructorArgs:[18]) {
        msg = "libo" //在task中设置该task的属性
        sayHello()
    }
    //Hello,defualt name, My age is 30
    //打印  Hello,libo, My age is 18
    
    
    //配置TaskInputs、TaskOutputs 增量构建
    //第2次运行时,test1 task 并没有运行,而是被标记为 up-to-date,而 test2 task 则每次都会运行,这就是典型的增量构建。
    task test1 {
        //设置inputs
        inputs.property("name", "hjy")
        inputs.property("age", 20)
        //设置outputs
        outputs.file("$buildDir/test.txt")
    
        doLast {
            println "exec task task1"
        }
    }
    
    task test2 {
        doLast {
            println "exec task task2"
        }
    }
    

    参考:
    https://juejin.cn/post/6844903838290296846#comment
    https://doc.yonyoucloud.com/doc/wiki/project/GradleUserGuide-Wiki/index.html

    demo地址:
    https://github.com/running-libo/GradleStudy

    相关文章

      网友评论

        本文标题:Gradle之Task操作

        本文链接:https://www.haomeiwen.com/subject/ffwyedtx.html