zoukankan      html  css  js  c++  java
  • 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作为参数,省略括号
                }
    
  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/Theshy/p/7847729.html
Copyright © 2011-2022 走看看