gradle任務

多種方式創建任務

def Task ex41CreateTask1 = task(ex41CreateTask1)

ex41CreateTask1.doLast {
    println "創建方法原型爲:Task task(String name) throws InvalidUserDataException"
}

def Task ex41CreateTask2 = task(ex41CreateTask2,group:BasePlugin.BUILD_GROUP)

ex41CreateTask2.doLast {
    println "創建方法原型爲:Task task(Map<String, ?> args, String name) throws InvalidUserDataException"
    println "任務分組:${ex41CreateTask2.group}"
}

task ex41CreateTask3 {
    description '演示任務創建'
    doLast {
        println "創建方法原型爲:Task task(String name, Closure configureClosure)"
        println "任務描述:${description}"
    }
}

tasks.create('ex41CreateTask4') {
    description '演示任務創建'
    doLast {
        println "創建方法原型爲:Task create(String name, Closure configureClosure) throws InvalidUserDataException"
        println "任務描述:${description}"
    }
}
liuhailongdeAir:testdradle liuhailong$ gradle ex41CreateTask1  ex41CreateTask2  ex41CreateTask3 ex41CreateTask4

> Task :ex41CreateTask1
創建方法原型爲:Task task(String name) throws InvalidUserDataException

> Task :ex41CreateTask2
創建方法原型爲:Task task(Map<String, ?> args, String name) throws InvalidUserDataException
任務分組:build

> Task :ex41CreateTask3
創建方法原型爲:Task task(String name, Closure configureClosure)
任務描述:演示任務創建

> Task :ex41CreateTask4
創建方法原型爲:Task create(String name, Closure configureClosure) throws InvalidUserDataException
任務描述:演示任務創建

BUILD SUCCESSFUL in 2s
4 actionable tasks: 4 executed
liuhailongdeAir:testdradle liuhailong$ 

多種方式訪問任務

task ex42AccessTask1
ex42AccessTask1.doLast {
    println 'ex42AccessTask1.doLast'
}

task ex42AccessTask2
tasks['ex42AccessTask2'].doLast {
    println 'ex42AccessTask2.doLast'
}

task ex42AccessTask3
tasks['ex42AccessTask3'].doLast {
     println '集合方式'
    println tasks.findByPath(':example42:ex42AccessTask3')
    println tasks.getByPath(':example42:ex42AccessTask3')
    println tasks.findByPath(':example42:asdfasdfasdf')
}

task ex42AccessTask4
tasks['ex42AccessTask4'].doLast {
    println tasks.findByName('ex42AccessTask4')
    println tasks.getByName('ex42AccessTask4')
    println tasks.findByName('asdfasdfasdf')
}
liuhailongdeAir:testdradle liuhailong$ gradle ex42AccessTask1 ex42AccessTask2 ex42AccessTask3 ex42AccessTask4

> Task :ex42AccessTask1
ex42AccessTask1.doLast

> Task :ex42AccessTask2
ex42AccessTask2.doLast

> Task :ex42AccessTask3 FAILED
集合方式
null

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/liuhailong/Desktop/testdradle/build.gradle' line: 15

* What went wrong:
Execution failed for task ':ex42AccessTask3'.
> Task with path ':example42:ex42AccessTask3' not found in root project 'testdradle'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s
3 actionable tasks: 3 executed
liuhailongdeAir:testdradle liuhailong$ 

任務分組和描述


def Task myTask = task ex43GroupTask
myTask.group = BasePlugin.BUILD_GROUP
myTask.description = '這是一個構建的引導任務'

myTask.doLast {
    println "group:${group},description:${description}"
}
liuhailongdeAir:testdradle liuhailong$ gradle ex43GroupTask

> Task :ex43GroupTask
group:build,description:這是一個構建的引導任務

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$ 

<<操作符其實爲 doLast 方法的短標記形式 相當你簡寫

任務的執行分析

def Task myTask = task ex45CustomTask(type: CustomTask)
myTask.doFirst{
    println 'Task執行之前執行 in doFirst'
}
myTask.doLast{
    println 'Task執行之後執行 in doLast'
}

class CustomTask extends  DefaultTask {

    @TaskAction
    def doSelf() {
        println 'Task自己本身在執行 in doSelf'
    }

}
liuhailongdeAir:testdradle liuhailong$ gradle ex45CustomTask

> Task :ex45CustomTask
Task執行之前執行 in doFirst
Task自己本身在執行 in doSelf
Task執行之後執行 in doLast

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$ 

任務順序與啓用 禁用

task ex46OrderTask1 << {
    println 'ex46OrderTask1'
}

task ex46OrderTask2 << {
    println 'ex46OrderTask2'
}

ex46OrderTask1.mustRunAfter ex46OrderTask2

task ex47DisenabledTask << {
println 'ex47DisenabledTask'
}
//ex47DisenabledTask.enabled =false
ex47DisenabledTask.enabled =false
liuhailongdeAir:testdradle liuhailong$ gradle ex46OrderTask1 ex47DisenabledTask

> Task :ex46OrderTask1
ex46OrderTask1

> Task :ex47DisenabledTask
ex47DisenabledTask

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed
liuhailongdeAir:testdradle liuhailong$ gradle ex46OrderTask1 ex47DisenabledTask

> Task :ex46OrderTask1
ex46OrderTask1

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$ 

斷言

final String BUILD_APPS_ALL="all";
final String BUILD_APPS_SHOUFA="shoufa";
final String BUILD_APPS_EXCLUDE_SHOUFA="exclude_shoufa";

task ex48QQRelease << {
    println "打應用寶的包"
}
task ex48BaiduRelease << {
    println "打百度的包"
}
task ex48HuaweiRelease << {
    println "打華爲的包"
}

task ex48MiuiRelease << {
    println "打Miui的包"
}

task build {
    group BasePlugin.BUILD_GROUP
    description "打渠道包"
}

build.dependsOn ex48QQRelease,ex48BaiduRelease,ex48HuaweiRelease,ex48MiuiRelease

ex48QQRelease.onlyIf {
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APPS_SHOUFA.equals(buildApps)
            || BUILD_APPS_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = true
    }
    execute
}

ex48BaiduRelease.onlyIf {
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APPS_SHOUFA.equals(buildApps)
                || BUILD_APPS_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = true
    }
    execute
}

ex48HuaweiRelease.onlyIf {
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APPS_EXCLUDE_SHOUFA.equals(buildApps)
                || BUILD_APPS_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = true
    }
    execute
}

ex48MiuiRelease.onlyIf {
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APPS_EXCLUDE_SHOUFA.equals(buildApps)
                || BUILD_APPS_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = true
    }
    execute
}
liuhailongdeAir:testdradle liuhailong$ gradle ex48QQRelease ex48BaiduRelease ex48HuaweiRelease ex48MiuiRelease

> Task :ex48QQRelease
打應用寶的包

> Task :ex48BaiduRelease
打百度的包

> Task :ex48HuaweiRelease
打華爲的包

> Task :ex48MiuiRelease
打Miui的包

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed
liuhailongdeAir:testdradle liuhailong$ 

任務規則

tasks.addRule("對該規則的一個描述,便於調試、查看等") { String taskName ->
    task(taskName) << {
        println "該${taskName}任務不存在,請查證後再執行"
    }
}

task ex49RuleTask {
    dependsOn missTask
}
liuhailongdeAir:testdradle liuhailong$ gradle ex49RuleTask

> Task :missTask
該missTask任務不存在,請查證後再執行

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$ 

插件
//version.gradle

ext {
    versionName = '1.0.0'
    versionCode = 1
}

build.gradle

plugins {
    id 'java'
}
apply plugin:'java'
apply plugin:org.gradle.api.plugins.JavaPlugin
apply plugin:JavaPlugin
apply {
    plugin 'java'
         println "java"
}

apply(new Action<ObjectConfigurationAction>() {
    @Override
    void execute(ObjectConfigurationAction objectConfigurationAction) {
        objectConfigurationAction.plugin('java')
    }
})

apply from:'version.gradle'

task ex52PrintlnTask << {
    println "App版本是:${versionName},版本號是:${versionCode}"
}
liuhailongdeAir:testdradle liuhailong$ gradle ex52PrintlnTask

> Configure project :
java

> Task :ex52PrintlnTask
App版本是:1.0.0,版本號是:1

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liuhailongdeAir:testdradle liuhailong$ 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章