Gradle知识点

487 阅读1分钟

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
 }

闭包代理

  1. this
  2. owner
  3. 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
            }
        }
    }
}