一个开源的项目自动化构建工具,建立在Apache Ant和Apache Maven概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不再使用XML形式管理构建脚本。
因为gradle是基于JVM的,所以在安装gradle之前需要确保本级已经安装了JDK,可以通过java -version来验证是否已经在安装了JDK。
在gradle官网(https://gradle.org)下载gradle压缩包后进行环境配置:
在Windows上的配置:
1.解压的指定目录配置到环境变量GRADLE_HOME
2.然后将bin目录添加到path:%GRADLE_HOME\bin;
3.最后通过gradle -v验证gradle是否安装成功
在Mac上的配置:
1.输入open -e .bash_profile打开.bash_profile
2.配置GRADLE_HOME和PATH,
例如export GRADE_HOME=....../gradle-4.1和export PATH=$PATH:$GRADLE_HOME/bin
3.输入source ~/ .bash_profile更新文件
4.可以通过gradle -version验证是否配置成功
Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
与Java比较:
1.Groovy完全兼容Java的语法(因为它们都是基于JVM的,Groovy最后也是编译成Java字节码的)
2.代码行分号是可选的
3.类、方法默认是public的
4.Groovy编译器自动给属性添加getter/setter方法
5.属性可以通过点号来获取
6.方法里最后一个表达式的值会被作为返回值
7.在Groovy里面==等同于.equals()方法,不会有NullPointerExceptions异常
测试:
public class ProjectVersion{ private int major; private int minor; public ProjectVersion(int major,int minor){ this.major = major this.minor = minor } public int getMajor(){ // return major; major } public void setMajor(int major){ this.major = major; } // public int getMinor(){ // return minor; // } // // public void setMinor(int minor){ // this.minor = minor; // } } ProjectVersion projectVersion = new ProjectVersion(1,2); println projectVersion.minor; ProjectVersion projectVersion1 = null println projectVersion1 == projectVersion
2 false
Groovy的高效特性:
1.assert语句断言
2.可选类型定义(弱类型语言)
3.可选的括号
4.字符串的表达有三种(单引号,双引号,三个单引号)
5.集合API(List和Map有更简单的写法)
6.闭包
测试:
def version = 1 //2 assert //assert version == 2 //3 括号是可选的 println version //4 字符串 def s1 = 'cmt1' def s2 = "cmt2 version is ${version}" def s3 = '''c m t 3''' println s1 println s2 println s3 //5 集合API //list def buildTools = ['ant','maven'] buildTools << 'gradle' assert buildTools.getClass() == ArrayList assert buildTools.size() == 3 //map def buildYears = ['ant':2000,'maven':2004] buildYears.gradle = 2009 println buildYears.ant println buildYears['gradle'] println buildYears.getClass() //6 闭包 def c1 = { v -> println v } def c2 = { println 'hello' } def method1(Closure closure){ closure('param') } def method2(Closure closure){ closure() } method1(c1); method2(c2);
1 cmt1 cmt2 version is 1 c m t 3 2000 2009 class java.util.LinkedHashMap param hello
每个gradle的构建脚本都有一个project实例,就是一个项目实例。
解析实例:
apply plugin: 'java' version = 0.1 repositories{ mavenCentral() } dependencies{ compile 'commons-codec:commons-codec:1.6' }
apply是project的一个方法,这里省去了(),apply plugin: 'java'其实是导入了一个插件可以通过gradle直接构建jar包,如下:通过导入两个插件后可以通过gradle以两种形似构建不同的包
version是project的一个属性
repositories也是一个方法,{mavenCentral()}是一个闭包作为参数调用这个repositories方法
同样的dependencies也是一个方法,{compile 'commons-codec:commons-codec:1.6'}也是一个闭包作为参数调用前面的dependencies方法