gradle学习之旅(二) gradle安装、构建脚本初识

一、安装

官网下载地址

二、构建脚本

    构建脚本名字默认为build.gradle,可以以指定脚本来完成构建。

    gradle的构建脚本使用Groovy脚本语言的DSL,其中使用了大量的语言特性来使得脚本的编写“看起来”像是在描述构建,实际上构建脚本的语言仍然是最基本的面向对象的Groovy或java代码,下面将详细说明Gradle构建脚本中使用到的Groovy与语言特性。

Groovy语法之java不同点

    1.表达式后面的分号是可选的;
    2.类和构造器的方法默认为public;
    3.方法体中最后一个表达式的值,意味着return语句是可选的;
    4.Groovy会默认为类的filed写好setter和getter方法,并且可以通过点号来获取,实际上底层调用的是getter和setter方法,点号只是一种简写;
    5.使用“==”来比较两个对象时,实际上是调用了equals()方法。

assert语句

    在java种也有assert关键字,只不过基本不用而且不推荐使用,Groovy种可以使用assert语句提供有用输出和查找问题根源,使用方法为assert [返回值为布尔值的表达式]

可选类型定义

    Groovy中可以用def关键字对声明类型进行简单标示,它作为java.lang.Object的一个占位符,在运行时Groovy通过所赋的值分析出其类型。

可选的括号

    在Groovy种如果方法签名至少需要一个参数,则方法可以省略括号,比如
            apply plugin:'java'  
            //apply是project的方法,调用该方法并传入一个Size为1的Map作为参数,key为‘plugin’,value为‘java’
            println('hello world')
            println 'hello world'

字符串

    ‘’号字符串相当于java的String类型
    “”号字符串是GString类型,支持插值变量到字符串中,使用方法为“这是一个字符串${变量名}”
    “”“
    。。。
    。。。
    “”“ 三引号用于多行的字符串

集合API

List
            底层是java.util.ArrayList,创建方式可以为:

            def buildtools = ['ant','maven'] 

            可以用左移操作符(<<)向List中加入一个元素,实际上调用的是add方法
           
            buildtools << 'gradle' 

            遍历:

                buildtools.each{ buildtool ->
                    println buildtool
                }
        上面的方法调用传入了一个闭包实例作为参数,在后面会提及。
Map
            底层是java.lang.LinkedHashMap,创建:

            def buildtools = ['ant':200,'maven':300] 
            添加
             buildtools['Gradle'] = 400 
            遍历
            
                buildtools.each{ buildtool , number ->
                    println "${buildtool}的数字为$number"
                }

命名参数

        就是在调用构造器的时候传入  参数名:值 这样的参数,在构造完成后会自动执行setter为实例的field赋值。

闭包

        闭包是一种类,其类型为groovy.lang.Closure,与java8的lambda特性相似,闭包可以被赋值给变量,作为参数传递给方法,并且向普通方法一样来调用(方法指针)。
        在Groovy中向方法传入一个闭包必须使用{},闭包总会返回一个值,返回的是最后一条语句的值,若最后一条语句没有值则返回null。
        闭包对象的调用为 对象名.call(),简写为 对象名(),在Groovy闭包对象代表一个方法,所以可以理解为方法引用。
        没有显示定义任何参数的闭包都可以访问一个隐式的参数it,代表调用这个闭包的时候第一个传进来的参数。
闭包委托

闭包的委托策略 这边文章里面讲述了闭包的委托策略,利用闭包委托可以实现如下代码

class ProjectVersion{
	Integer major
	Integer minor
	
	void increment(Closure closure){
		closure.resolvesStrategy = Closure.DELEGATE_ONLY
		closure.delegate = this
		closure()
	}
	ProjectVersion projectVersion = new ProjectVersion(major: 1, minor: 10)
	projectVersion.increment{ major += 1 }
	projectVersion.increment{ minor += 5 }
}

帮助文档

GDK在线文档 这里面可以找到String、Collection、File、Stream的很多好用的方法。
官方文档

    在了解了上述内容之后,就可以看懂大部分的构建脚本代码在做什么了,一个构建脚本对应一个Project实例,可以被gradle命令执行的为Task接口的实例,gradle脚本是一种贯彻领域设计的语言,所以对于自动化项目的各个方面都有对应的设计,比如还有DependencyHandler代表依赖管理,这些在之后的学习中都会了解到。

    下面是一个java项目的构建脚本,以此来说明脚本中用到的Groovy语言特性:
            apply plugin:'java' //调用Project的apply方法,传入一个size为1的Map作为参数,方法调用省略括号
            version = '1.0' //调用Project的setter方法来为项目设置版本属性
            repositories{
                mavenCentral()   //调用Project的repositories方法,并传递一个闭包参数,该方法会调用闭包委托的mavenCentral()方法。
            }
            dependencies{
                compile 'commons-codec:commons-codec:1.6'  //调用Project的dependencies方法,并传递一个闭包参数,调用闭包委托的compile方法,用一个String作为参数,省略括号
            }
posted @ 2017-11-17 00:41  The_shy  阅读(488)  评论(0编辑  收藏  举报