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$ 

猜你喜欢

转载自blog.51cto.com/haidragon/2173999