五: Gradle 中的project, task和plugin

配置build.gradle时,本质是配置Project instance,project instance中最重要的属性,是tasks,plugin则是提供了一些实现好了的tasks,供用户使用

project

build.gradle配置的就是Project instance。build.gradle中的代码,都围绕着Project的属性设置(properties),函数调用(method),或者script block调用进行。gradle运行时,会调用project instance开展实际build工作

task

project中的核心属性,是tasks。task定义了一个个gradle需要真正执行的任务。可以说,我们在配置project的目的 ,最终是为了调用project中的task,project必须设置task才有意义

比如以下build.gradle文件定义了task:

//Script block调用
repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

//设置property
project.ext.prop1 = "foo"

//设置property
tasks.register('mytask') {
   // Method调用
   println "Method call uri: ${project.uri('src')}"
   //输出script block调用的结果
   println "Script block repositories:"
   project.repositories.each { println "Name: " + it.name + "; url: " + it.url }
   println "Property prop1: ${project.ext.prop1}"
}

一次gradle的执行过程,就是调用task的过程:

gradle mytask

plugin

用户可以随心所欲的创建task。但人们预先创建了一些常用的task,放在plugin中。plugin就是封装着task实现的代码,能够被gradle引入。比如需要执行java编译相关的task,就有对应的java plugin, 或者java application plugin。创建好了调用javac, jar等的task。用户直接使用就可以。

当然也可以不使用任何plugin,那就得自己DIY相关的task,来执行编译工作

在build.gradle引入一个java application plugin:

plugins{
    id 'application'
}

事实上,Gradle基本上只定义了一些规则,具体的操作都由tasks实现,而tasks的来源,大多都是plugin。

可以这样理解,plugin提供了Gradle的大部分具体实际功能。比如说要编译java程序,不引入java plugin,自己一个个手写task,完全是浪费生命



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825