课程介绍
工欲善其事必先利其器,我们想要更高效地开发,就需要更方便的项目编译构建工具。
过去在 Java 的世界里,Ant、Maven 是主要的构建工具,而 Maven 又凭借其强大的依赖配置战胜 Ant,基本上成为了 Java 构建的标准。而在现代,系统日益复杂,构建的灵活性要求越来越高,Maven 也无法很好地支持复杂的系统构建,而 Gradle 是基于 Groovy 语言的构建工具,它能帮助我们构建更复杂的项目。
本期达人课,我将带大家从最基础的 Groovy 语法开始学习,再一起探讨 Gradle 强大的特性,最后使用 Jenkins 和 Gradle 实现自动化的集成、打包和部署的实战练习。
通过本课程学习,可以全面了解 Gradle 的具体使用方法和实际项目的实战经验。
课程内容
导读:Gradle 如何加速开发者的生产效率
前言
工欲善其事必先利其器,我们想要更高率的项目开发,就需要更方便的项目编译构建工具。过去在 Java 的世界里,Ant、Maven 是主要的构建工具,而 Maven 又凭借其强大的依赖配置战胜 Ant,基本上成为了 Java 构建的标准;而在现代,系统日益复杂,构建的灵活性要求越来越高,Maven 也无法很好地支持复杂的系统构建,而 Gradle 是基于 Groovy 语言的构建工具,它使用易懂的 DSL 语法 ,将开发过程中需要的编译、构建、测试、打包以及部署工作,变得非常简单方便和重复使用,而且 Gradle 还可以根据需要定义自己的 model。
Gradle 的优点
1,依赖管理
在软件开发的过程中,我们通常需要使用很多的第三方库,这时一个好的依赖管理工具就显得尤为重要了,Gradle 作为自动构建工具,它对依赖管理支持地非常地好。
- 依赖类型:第一类是项目中所需要的库,它包括本地或仓库中的文件和其他项目中的文件;第二类是实现自动化编译、部署等所需的库,包含 Gradle 的 API 和 Groovy 编写的 Task、Plugin 等。
- 依赖范围:控制哪些依赖在哪些 classpath 中可用,哪些依赖包含在一个应用中。常用依赖范围如下:
1) compile:源代码( src/main/java )编译时的依赖,最常用
2) runtime:源代码( src/main/java )执行时依赖
3) testCompile:测试代码( src/main/test )编译时的依赖
4) testRuntime:测试代码( src/main/java )执行时的依赖
5) archives:项目打包( e.g.jar )时的依赖
- 依赖仓库:使用
repositories
定义依赖仓库,也可以同时指定多个仓库,还能指定私服仓库。如下代码示例:
/* 指定Maven Central仓库 */repositories { mavenCentral()}/* 指定Maven JCenter仓库 */repositories { jcenter()}/* 指定Maven本地仓库 */repositories { mavenLocal() }repositories { /* 指定本地仓库地址 */ maven { url "file://D:/local_repository/" } /* 指定的远程仓库 */ maven { url "http://mvnrepository.com/" } /* 私服仓库 */ maven { url "<you_company_resp_url>" credentials { username 'your_username' password 'your_password' } }}
依赖传递:很多库都会依赖于其他的库,例如 spring-core.jar 依赖 log4j.jar,我们只需添加 spring-core.jar 即可,Gradle 将自动把 spring-core.jar 所依赖的所有库都全部下载下来。
依赖冲突:依赖传递可能会导致版本冲突,即依赖传递下载的库可能与项目依赖的另一个库版本冲突,这种情况下可以排除一些库,而下载其他所有的依赖库,即选择性排除。如下代码示例:
compile ("com.alibaba:dubbo:2.8.4") { // group是必选项,module可选 exclude group:'org.springframework', module: 'spring-aop'}
Gradle 解决冲突有以下几种方式:
1) 最近版本策略(默认)
2) 冲突失败策略
3) 强制指定版本策略
- 动态依赖:动态依赖增加了库版本依赖时的灵活性,如下代码所示:
dependencies { /* 选择18以上任意一个版本 */ compile group:'com.google.guava',name:'guava',version:'18.+' /* 选择最新的版本,避免直接指定版本号 */ compile group:'commons-io',name:'commons-io',version:'latest.integration'}
关于 Gradle 依赖等基础内容,我将在第3章介绍。
2,强大的任务功能
在 Gradle 的世界中最重要的两个概念就是:工程( Project )和任务( Task )。每一个工程又由一个或多个任务组成,一个任务代表了一个工作的最小单元,它可以是一次类的编译、打一个 JAR 包、生成一份 Javadoc 或者是向仓库中提交一次版本发布。
而 Gradle 可以创建更为强大复杂的任务,这些任务可以有它们自己的属性和方法,这一点正是和 Ant targets 不一样的地方,这些强大的任务既可以由你自己创建也可以使用 Gradle 内建好的。关于 Gradle 任务的内容,我将在第4章中详细分析。
3,灵活的代码结构
为了更好的组织管理我们的 Gradle 代码,Gradle 提供了很多方法来组织我们的逻辑代码。首先你可以把所有的代码都放在一个任务中实现,但是如果有很多的任务都使用相同的逻辑,那么你可以把这相同的逻辑放到一个方法中,每个任务都共享该方法。如果我们是多工程的话,可以把相同的逻辑封装到一个方法中,这个方法在父级工程中定义,所有子级工程都能共享。如果你的逻辑和属性很复杂,你可以把它们定义为插件形式提供使用。关于 Gradle 逻辑代码封装,我将在第6章中介绍。
4,丰富的插件选择
插件是对 Gradle 功能的扩展,Gradle 有着丰富的插件,例如编译 Java 代码的 Java 插件,它添加了新任务(例如 JavaCompile ),域对象(例如 SourceSet ),约定(例如 Java 源代码是位于 src/main/java ),以及扩展的核心对象和其他插件的对象。我将在第9章中介绍 Gradle 中常用的插件。
5,易于扩展的自定义插件
Gradle 插件功能可以很好的组织我们的编译逻辑代码,使它能在不同的项目和工程中重复使用。我们可以自定义实现自己的 Gradle 插件,然后分享给其他人使用。我们可以使用不同的语言来实现,不过我喜欢使用 Groovy 来实现的,大家也可以使用像 Java、scala 等喜欢的别的语言来实现。关于 Gradle 自定义插件,我将在第5章中具体介绍。
Gradle 和 Ant 以及 Maven 的关系
1,Ant
Ant 是2000年发布,它是用 XML 作为脚本编写格式,它的学习成本很低不需要什么特殊的准备就能上手,它基于过程式编程的,逐渐具备了支持插件的功能,因此在很短时间内成为了 Java 项目上最流行的构建工具。
Ant 的不足是因为 XML 本质上是层次化的,并不能很好地贴合 Ant 过程化编程的初衷,它的另一个问题是,稍微大型的项目编写的 XML 文件很快就大得无法管理。
2,Maven
Maven 发布于2004年,目的是解决使用 Ant 所带来的一些问题。不过它仍旧使用 XML 作为编写构建配置的文件格式,但是文件结构却有巨大的变化。Ant 需要将执行 task 所需的全部命令都一一列出,然而 Maven 依靠约定( convention )并提供现成的可调用的目标( goal )来执行构建。而 Maven 最重要的一个功能是,它具备从网络上自动下载依赖库的能力( Ant后来通过 Ivy 也具备了这个功能),这一点革命性地改变了我们开发软件的方式。
Maven 也有它的问题,依赖管理不能很好地处理相同库文件不同版本之间的冲突,XML 作为配置文件的格式有严格的结构层次和标准,定制化目标( goal )很困难。因为 Maven 主要聚焦于依赖管理,实际上用 Maven 很难写出复杂、定制化的构建脚本,甚至还不如 Ant。
3,Gradle
Gradle 是出现较晚的工具,它于2012才诞生,它结合了前两者的优点,在此基础之上做了很多改进,它具有 Ant 的强大和灵活,又有 Maven 的生命周期管理和易用性。
Gradle 没有使用 XML,而是使用基于 Groovy 专门的 DSL,从而使 Gradle 构建脚本变得比用 Ant 和 Maven 写的要简洁清晰得多。Gradle 的 DSL 被设计用于贯穿软件的整个生命周期,从编译、到静态检查、到测试、再到打包、最后到部署等环节。
整体而言,Gradle 的优势已经越来越明显,如果是新的项目,不要犹豫,直接使用 Gradle,它会给你带来更大的惊喜。
使用 Gradle 实现的持续交付部署流程
Gradle 实现的持续交付部署流程我将在第10章中详细介绍,在这里先展示一张大根的流程图。
小结
Gradle 已经非常成熟,成为 Java 构建的标配,我将通过本期达人课从入门到实战地为大家介绍 Gradle 相关知识。如果大家想了解更多内容,可以关注我和朋友合著的新书《分布式服务架构:原理、设计与实战》。
本书以分布式服务架构为主线,重点介绍了保证服务化架构的一致性、高性能、高可用的解决方案和至佳实践,并介绍了微服务架构中倡导的容器化过程,以及敏捷开发和敏捷上线的流程,对分布式服务系统架构设计的核心要点逐一介绍,对重点主题配有代码、设计文档和开源项目,每个主题独立成章,让读者不但可以了解大规模分布式微服务系统是怎么设计的,还可以在了解原理的同时,了解作者在实际项目中积累的至佳实践和模式,大大提高互联网项目的实现效率。
欢迎大家扫描二维码购买,也欢迎购买我达人课的朋友可以在读者圈与我互动交流,共同学习。
第01课:Gradle 的安装和开发工具介绍
文章目的
通过本章内容学会如果安装 Gradle,并且了解相关开发工具的使用。
需要准备
- 一个熟悉的 IDE 开发工具
- JDK 7及以上
- Gradle 3.2以上
安装Gradle
1,通过包管理工具安装
- SDKMAN 是 Unix-based 系统下的包管理工具,它可以管理多个版本的软件开发工具包,使用如下:
$ sdk install gradle 4.2.1
- Homebrew 是 macOS 下的包管理工具,使用如下:
$ brew update && brew install gradle
- Scoop 是 Windows 下的包管理工具,使用跟 Homebrew 相似,如下:
$ scoop install gradle
- MacPorts 是 macOS 下的包管理工具,使用如下:
$ sudo port install gradle
2,通过手动安装
第1步 在官网下载最近的发布包。
第2步 解压发布包到指定的路径下。
Linux 和 MacOS 系统的用户,可以使用以下命令解压:
$ mkdir /opt/gradle$ unzip -d /opt/gradle gradle-4.2.1-bin.zip
Windows 系统用户,可以使用解压工具解压到C:\Gradle
目录中。
- 第3步 配置系统环境变量
Linux 和 MacOS 系统的用户,在PATH
环境变量中配置指向解压路径下的bin
目录,代码如下:
$ export PATH=$PATH:/opt/gradle/gradle-4.2.1/bin
Windows系统用户,在“我的电脑”右键,选择“属性”菜单,如下图:
在系统变量中,选择Path
项,然后点编辑,并加入C:\Gradle\gradle-4.2.1\bin
值,最后点确定完成。
3,测试是否安装成功
打开一个终端,并执行命令gradle -v
查看 Gradle 的版本信息,如果显示正常代码安装成功,操作如下:
$ gradle -v------------------------------------------------------------Gradle 3.2------------------------------------------------------------Build time: 2016-11-14 12:32:59 UTCRevision: 5d11ba7bc3d79aa2fbe7c30a022766f4532bbe0fGroovy: 2.4.7Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015JVM: 1.8.0_60 (Oracle Corporation 25.60-b23)OS: Mac OS X 10.11.6 x86_64
常用开发工具介绍
1,Eclipse 开发工具
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。在最新版的 Eclipse 中已经默认集成了 Gradle 的开发插件,可以直接在新建工程时选择 Gradle Project 工程。如下图:
1,IntelliJ IDEA 开发工具
IntelliJ IDEA 是 java 语言开发的集成环境,IntelliJ 在业界被公认为最好的 java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、各类版本工具( git、svn、github 等)、JUnit、CVS 整合、代码分析、 创新的 GUI 设计等方面的功能可以说是超常的。我们在创建工程的时候可以直接选择 Gradle 工程,如下图:
小结
通过本章的介绍,我们已经会安装 Gradle 了,并且初步介绍了下开发工具,我比较推荐使用的是 IntelliJ IDEA,在后面的章节中我都会一直使用它为大家演示具体的操作方式。想了解更多其它内容,可以关注我和朋友写的新书《分布式服务架构:原理、设计与实战》。
第02课:Groovy 语法简单介绍
第03课:Gradle 基础脚本的实现
第04课:Gradle 中的任务探密和实践
第05课:Gradle 中任务的高级特性
第06课:Gradle 中自定义任务的实现
第07课:Gradle 中自定义插件的实现
第08课:Gradle 组织逻辑代码的八种形式
第09课:Gradle 中文件的实战操作
第10课:Gradle 实现多工程的编译打包
第11课:Gradle 中常用插件的介绍-上
第12课:Gradle 中常用插件的介绍-下
第13课:Gradle 项目实战-编译打包
第14课 Gradle 项目实战-与 Docker 的结合使用
第15课:Gradle 项目实战-与 Git 和 Jenkins 的结合使用
阅读全文: http://gitbook.cn/gitchat/column/59e467846958416d85ae933e