配置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,完全是浪费生命
发表回复