Build life cycle
Initialization 在这个阶段,gradle会首先生成gradle对象和settings对象,然后执行init.gradle中脚本,再执行settings.gradle中的脚本,根绝settings.gradle给每个项目生成一个project对象
Configuration 在这个阶段,gradle会运行参与本次构建的所有project中的build.gradle文件,这个阶段完成之后,每个project中的所有task以及相互关系就确定了
Execution 执行阶段,gradle会根据传给它的task名字运行指定的task
apply plugin v.s plugins
stackoverflow.com/questions/3… plugins是最新的语法,要求你要导入的plugin必须在gradle仓库里,而不是maven仓库。
自定义plugin相关知识
闭包Closure
参考链接: 作者:呆萌狗和求疵喵 链接:www.jianshu.com/p/bcaf9a269… 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Closure<Integer> xx = {
int a=2 ->
a + b
}
闭包代理
- this
- owner
- delegate
class Person {
String name
}
class Thing {
String name
}
def p = new Person(name: 'Norman')
def t = new Thing(name: 'Teapot')
def upperCasedName = { delegate.name.toUpperCase() }
upperCasedName.delegate = p
assert upperCasedName() == 'NORMAN'
upperCasedName.delegate = t
assert upperCasedName() == 'TEAPOT'
创建Extension
extension可为plugin定义自定义变量
public class PersonExt {
String name;
int age;
boolean boy;
@Override
public String toString() {
return "I am $name, $age years old, " + (boy?"I am a boy":"I am a gril");
}
}
class HelloPlugin implements Plugin<Project>
{
@Override
void apply(Project project) {
project.extensions.add("personExt", PersonExt) //该属性对子项目也可见
project.task('printPerson') {
group 'junli'
doLast{
PersonExt ext = project.personExt
println ext
}
}
}
}