zoukankan      html  css  js  c++  java
  • Gradle入门-构建脚本的基础介绍

    几种创建 gradle 任务的方法

    1.普通创建

    task hello1 {
        doLast{
            println 'hello1'
        }
    }
    

    2.直接用任务名称创建

    Task hello2 = task(hello2)
    hello2.doLast {
        println "hello2"
    }
    

    3.任务名称+任务配置创建

    Task hello3 = task(hello3,group: BasePlugin.BUILD_GROUP)
    hello3.doLast {
        println "hello3"
    }
    

    4.TaskContainer 的 create 方法创建

    tasks.create(name: 'hello4') {
        doLast {
            println "hello4"
        }
    }
    

    任务依赖

    1.依赖于已经存在的任务的任务声明

    task hello {
        doLast{
            println 'hello'
        }
    }
    
    task intro{
        dependsOn hello
        doLast {
            println "I'm Gradle"
        }
    }
    

    执行: gradle -q intro

    输出:
    hello
    I'm Gradle

    2.懒惰依赖-另一项任务不存在(目前还不存在

    task hello {
        dependsOn 'afterhello'
        doLast{
            println 'hello'
        }
    }
    
    task afterhello{
        doLast {
            println "after hello task"
        }
    }
    

    执行: gradle -q hello

    输出:

    after hello task
    hello

    动态定义任务

    动态定义任务指的是在运行时来定义任务的名称

    4.times { counter ->
        task "task$counter" {
            doLast {
                println "I'm task number $counter"
            }
        }
    }
    

    times是Groovyjava.lang.Number中拓展的方法,是一个定时器。4.times中循环创建了三个新任务,隐式变量number的值为0,1,2,3 任务的名称由 task 加上 number 的值组成,达到了动态定义任务的目的。

    执行:gradle -q task0

    输出:I'm task number 0

    操作现有任务

    它在运行时动态地向任务添加依赖项

    1.通过 api 访问任务-添加依赖项

    4.times { counter ->
        task "task$counter" {
            doLast {
                println "I'm task number $counter"
            }
        }
    }
    task0.dependsOn task2, task3
    

    执行:gradle -q task0

    输出:

    I'm task number 2
    I'm task number 3
    I'm task number 0

    也可以将行为添加到现有任务中。

    2.通过 api 添加行为访问任务

    task hello {
        doLast {
            println 'Hello Earth'
        }
    }
    hello.doFirst {
        println 'Hello Venus'
    }
    hello.configure {
        doLast {
            println 'Hello Mars'
        }
    }
    hello.configure {
        doLast {
            println 'Hello Jupiter'
        }
    }
    

    执行:gradle -q hello

    输出:

    Hello Venus
    Hello Earth
    Hello Mars
    Hello Jupiter

    Groovy DSL快捷表示

    作为构建脚本的属性访问任务

    task hello {
        doLast {
            println 'Hello world!'
        }
    }
    hello.doLast {
        println "Greetings from the $hello.name task."
    }
    

    执行:gradle -q hello

    输出:

    Hello world!
    Greetings from the hello task.

    默认任务

    Gradle允许您定义一个或多个默认任务,如果没有指定其他任务,则可以执行这些任务。

    defaultTasks 'clean', 'run'
    
    task clean {
        doLast {
            println 'Default Cleaning!'
        }
    }
    
    task run {
        doLast {
            println 'Default Running!'
        }
    }
    
    task other {
        doLast {
            println "I'm not a default task!"
        }
    }
    

    执行:gradle -q

    输出:

    Default Cleaning!
    Default Running!

    DAG 配置

    Gradle有一个配置阶段和一个执行阶段。在配置阶段之后,Gradle知道应该执行的所有任务。Gradle为您提供了一个利用这些信息的钩子。这样做的一个用例是检查发布任务是否在要执行的任务中。根据这一点,您可以为某些变量分配不同的值。

    在下面的示例中,执行distributionrelease任务导致不同的值。version变量。

    task distribution {
        doLast {
            println "We build the zip with version=$version"
        }
    }
    
    task release {
        dependsOn 'distribution'
        doLast {
            println 'We release now'
        }
    }
    
    gradle.taskGraph.whenReady { taskGraph ->
        if (taskGraph.hasTask(":release")) {
            version = '1.0'
        } else {
            version = '1.0-SNAPSHOT'
        }
    }
    

    执行: gradle -q distribution

    输出:We build the zip with version=1.0-SNAPSHOT

    执行: gradle -q release

    输出:We build the zip with version=1.0

  • 相关阅读:
    如何锻炼出最牛程序员的编码套路
    如果仔细观察他们,你会发现他们时时都在锻炼
    单纯地每天埋头于工作并不能算是真正意义上的锻炼
    把全世界的人们都联系在一起,提升人们的社交参与度
    HTML5十五大新特性
    html5的八大特性
    【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家
    【分块】【链表】bzoj2738 矩阵乘法
    【分块】bzoj3343 教主的魔法
    【线段树】bzoj3747 [POI2015]Kinoman
  • 原文地址:https://www.cnblogs.com/huaranmeng/p/13042241.html
Copyright © 2011-2022 走看看