Gradle是什么?
基于特定领域语言Groovy来进行项目管理的自动化构建工具
对比于Maven的区别?
Maven基于传统xml依赖管理,工作中的直观缺点是在项目规模越来越大的时候,pom依赖眼花缭乱,管理起来很费劲,而且之前的文章《maven构建依赖管理和依赖范围》中写到在工作中遇到jar包冲突,不好排查。Gradle因其的简洁灵活,功能强大,可以通过查看依赖报告直观的解决依赖冲突,能更好的适用复杂的构建环境。
Gradle安装很简单,步骤如下:
1、从官网下载压缩包:https://gradle.org/
2、配置环境变量
3、gradle -v, 验证环境变量配置是否成功
3、注意配置新建变量 GRADLE_USER_HOME
变量名:GRADLE_USER_HOME
变量值:自定义Gradle仓库目录或者Maven的仓库目录(如:D:\apache-maven-3.1.1\repository)
在Gradle安装目录下的 init.d 文件夹下,新建一个 init.gradle 文件,里面填写以下配置
定义repositories 中 jar 包的获取顺序,优先使用本地maven仓库,在maven切换到gradle很方便。非常实用,重点!!!
Groovy语言如何使用,具有哪些特性?
Gradle简洁灵活的特点主要是,基于Groovy这种动态语言才能够实现,所以想学会Gradle,核心的在于能够学会Groovy如何编写。Groovy编码同Java一样都是被编译成字节码文件运行在JVM虚拟机上,直接通过比较学习来了解Groovy几乎没有什么难度。
Groovy主要的特点如下:
Groovy完全兼容Java的语法,但是在使用时在Java的基础上又简化很多
1、分号是可选的,可以省略不写
2、类、方法默认是public,不像Java有好几个修饰符
3、编译器自动给属性添加getter/setter方法
4、属性可以直接用点号获取
5、最后一个表达式的值会被作为返回值,return可以不写
6、==在Java中比较的是内存地址,在Groovy中比较的是值,等同于equals()
高效的Groovy特性:
1、assert语句
2、动态语言,自动指定变量类型
3、字符串有三种表达方式单引号,双引号,三个单引号
4、Groovy中结合List、Map有更简单的写法
5、闭包,理解是把代码块作为参数传入方法中调用
代码展示以上特性:
自动化构建工具主要解决的是,依赖管理,自动化测试,项目部署,让这些重复性的工作,能使用构建工具简单舒服的依赖管理,这些功能maven,gradle都已经具备,只是对比maven,gradle实现的更加简洁灵活,非常好用。
gradle兼容maven,所以目录结构相同:
而在进行依赖管理的时候到底与maven有何不同?
1、引入依赖形式不同
maven通过groupId、artifactId、version唯确定jar包:
gradle通过group、name、 version唯一确定jar包 :
2、解决版本冲突方式不同:
出现版本冲突的原因是依赖的传递性,可以理解为爸爸依赖爷爷,如果儿子依赖爸爸,那么确定儿子依赖爷爷。
maven:
只能进行手动排除
gradle:
默认自动使用高版本,所以大部分时候并不需要开发人员自己去指定一个版本,有效的避免了开发中自己去哼哧哼哧j解决ar包冲突问题,下图显示jar包冲突时默认使用了高版本。
除了默认外可以直接排除传递性依赖
还可以修改默认的策略,来强制指定一个版本
有依赖报告可以查看,方便找问题,这三处截图省略。
3、gradle具备自定任务功能task
比如通过自定义构建web项目的目录结构,创建成功
4、多项目构建
很多时候一个项目都只是按MVC来模块化,较少的模块一般是简单的项目,在复杂项目中有非常多的模块,如果maven进行管理通常都是通过继承parent模块来层层继承,xml的配置依赖jar包过多,梳理项目间的依赖关系会格外心累,而gradle真的是多项目构建的福音,在parent项目build.gradle文件中,使用allprojects{}可以对所有模块需要的配置进行指定,使用subprojects{}可以对所有子模块需要依赖的包进行指定,这样其他子项目就不需要进行依赖了,要改动版本只需要改一处就可以,涉及代码较多,本文不展开说明。
5、自动化测试
在自动化测试上,maven和gradlle没有太大差别,只要把测试代码写到指定的目录,那么构建工具就可以自动发现测试用例自动执行。gradle更优秀的是在build之后到reports目录下,对测试结果有index.html,使用页面形式对测试的结果进行可视化的展示。
6、项目部署
maven和gradle都可以将项目打包到本地和指定的远程仓库,目前我工作中使用的就是通过maven将项目打包的公司的svn上,而gradle是通过maven-publish插件操做,操作的也是maven的仓库,很明显使用gradle更便捷。