Step into Gradle - 02 - Project 和 Task

来源:互联网 发布:高斯如果在清华 知乎 编辑:程序博客网 时间:2024/06/05 07:25

目录

    • Project 和 Task
      • 概述
      • Project
        • 获得 Project 对象
        • Project API
      • Task
        • 建立 Task
        • 获得某个 Task 对象
        • 默认 Task
        • 动态创建 Task
        • 追加行为
        • 依赖外部 Task
        • 指定 Task 执行顺序
        • 禁用指定 Task

摘要

project api,建立 Task(2 种),获得 Task,动态创建 Task,依赖外部 Task,指定执行顺序

Project 和 Task

概述

运行时 gradle 会先成 project 对象,然后再生成 task 对象,对于不属于任何 task 的代码则生成为统一的 script 对象。

Project

获得 Project 对象

project(projectName)

Project API

task projApi << {    println name    //projApi    println project.name    //core    println path    //:core:projApi    println buildDir    //Users/me/Documents/bitbucket/steps_java/learn_gradle/core/build    println projectDir  //Users/me/Documents/bitbucket/steps_java/learn_gradle/core}

运行

gradle -q projApi

当方法和属性没有在 build 脚本中定义时,gradle 会试图访问对应的 project 的成员

Task

建立 Task

第一种方式

task hello {    println "hello world"}

以上代码定义了一个 Task,并指定了配置该 Task 时执行的代码。

第二种方式

task hello << {    println "hello world"}

以上代码定义了一个 Task,并指定了执行此 Task 时执行的代码。实际为以下代码的简写形式

task hello {    doLast {        println "hello world"    }}

task 有 configuration 和 action,当使用 << 实际是定义了一个 action 的快捷方法

获得某个 Task 对象

project(projectName).taskName

project(projectName).property(taskName)

默认 Task

不指定任何 Task 时,gradle 会执行默认 Task

task d1 << {    println "d1"}task d2 << {    println "d2"}defaultTasks "d1", "d2"

运行

gradle -q

动态创建 Task

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

运行

gradle -q task1

追加行为

task hi << {    println "hi world"}hi.doFirst {    println "first"}hi.doLast {    println "last"}hi << {    println "HELLO WORLD"}

运行

gradle -q hi

输出

firsthi worldlastHELLO WORLD

依赖外部 Task

task taskX(dependsOn: ':core:hello') << {    println "taskX"}

运行

gradle -q taskX

或者

task taskY << {    println "taskY"}taskY.dependsOn {    tasks.findAll { task ->        task.name.startsWith("hello")    }}

运行

gradle -q taskY

指定 Task 执行顺序

task taskTwo<<{    println "taskTwo"}task taskOne<<{    println "taskOne"}taskTwo.mustRunAfter taskOne

运行

gradle -q taskTwo taskOne

禁用指定 Task

task taskThree<<{    println "taskThree"}taskThree.enabled=false

运行

gradle -q taskThree
0 0
原创粉丝点击