gradle基础语法

java/groovy

gradle脚本是通过groovy语法编写的,而groovy又是无缝兼容java的,所以gradle脚本中可以直接写java代码或groovy代码,例如:

{
    //java代码
    Map<String,String> map = new HashMap<>();
    map.put("name","vvv")
    map.put("age","123")
    println(map.get("name")+"  : "+map.get("age"))

    //groovy代码
    File f = file(project.projectDir)
    f.list().each {
        item ->
            println(item)
    }

}

定义变量

局部变量

     局部变量通过def关键字定义,属于groovy基础语法

额外属性

     额外属性通过gradle对象的ext属性定义,类似于javascript的prototype属性,动态的给对象添加属性。

    def name = "dengyun.zhou"
    project.ext{
        springVersion = "3.4.0"
        dianpingGroup = "com.dianping.com"

    }
    println(name)
    println(project.ext.springVersion + " : "+ project.ext.dianpingGroup)
}

gradle.properties

gradle命令运行时会默认读取$GRADLE_HOME和当前项目根目录下的gradle.properties文件,因此在gradle脚本中可以直接使用其中的内容,例如:

    //读取gradle.properties文件中存在osName属性,则直接使用
    if(hasProperty("osName")){
        println(osName)
    }
    //hasProperty方法为Project对象的成员,用于判断当前属性是否存在。
}

引用脚本文件

在一个脚本文件中引入另外一个脚本文件,例如

当前脚本build.gradle中使用如下代码引入example.gradle和taskTest.gradle两个脚本文件:
{
    apply (from:'example.gradle')
    apply from: 'taskTest.gradle'
}

对象增强

通过Project提供的configure方法可以动态的增强对象,例如:

{
    Map test = configure(new HashMap()){
        first = 1
        end = 10
    }
    test.put("name","vv")
    println(test.first+"  : "+test.get("name"))
}

Project Api

一个项目对应一个Project对象的实例project,project对象是我们在gradle中访问一切内容的入口,在构建脚本中,如果我们访问未定义的方法或者属性,最终都会被委托到project对象中。

{
    println(name)
    println(project.name)
}
build.gradle中未定义name属性,则println(name)转化为println(project.name),所以两句效果是一致的。
project对象是gradle默认创建的Project类的实例,可以在脚本文件中直接使用。

Project对象中定义了项目相关的属性和方法,buildDir(构建目录)、projectDir(项目根路径)等,我们可以在gradle脚本文件中直接使用,例如:

    println(project.description)
    println(project.artifacts)
    println(project.buildDir)
    println(project.projectDir)

Script Api

当gradle执行脚本文件的时候,他将脚本编译为一个实现了Script接口的类,所以Script对象中定义的方法和属性在脚本文件中都可以使用。