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作为参数,省略括号
                }
    
  • 相关阅读:
    File 类
    RocketMQ4.X 集群
    Java 的基本网络支持
    SpringBoot2.X 整合 RocketMQ4.X
    RocketMQ系列:rocketmq运维控制台使用详解(全网独家)
    RocketMQ系列:docker搭建rocketmq单机环境
    RocketMQ系列:rocketmq运维控制台搭建
    RocketMQ系列:单机快速搭建单broker环境
    Jenkins:Git拉取代码版本不对
    pip3:no acceptable C compiler found in $PATH
  • 原文地址:https://www.cnblogs.com/Theshy/p/7847729.html
Copyright © 2011-2022 走看看