Gradle
干啥子的:gradle 是一个流行的自动化构建工具
官网在此:http://gradle.org
它是个新人:是java自动化构建工具家族里面的最新成员
紧箍咒:遵循 Apache License 2.0开源协议
被大众喜欢:Android, Spring Framework, Hibernate都将自己的构建系统迁移到使用Gradle的方式,现在应该更多了:)
Gradle的一些特性
1. 声明式依赖管理
Gradle提供了一种很方便的方式去声明项目的依赖关系,会自动地帮你下载依赖(以及传递依赖)。
2. 声明式构建
Gradle 使用基于Groovy的DSL来声明构建。
那么问题来了(简单介绍下):
Groovy:我是一种基于JVM的敏捷开发语言
官网在此:http://groovy-lang.org
DSL:我的全称是领域特定语言(domain-specific language)
Groovy的DSL的官网:https://docs.gradle.org/current/dsl/
3. 按照约定构建
Gradle为Java, Groovy, web, Scala, Android 和 OSGi项目都提供了合理的默认设置和约定。
举个栗子(以Java为栗)
有如下默认约定:
src\main\java 这个路径下放生产代码
src\main\test 这个路径下放测试代码
src\main\resources 这个路径下放资源文件
有如下默认构建任务:
自上而下有序进行:
compile 编译代码
run 运行
test 测试
generate 生成jar包
如果遵从如上的约定,你的构建脚本可以写得炒鸡简单又简洁;当然也可以不遵从这些约定,但是写起来麻烦那么一丢丢;
4. 增量构建
简单理解:
在构建工具清理和重新编译所有内容时,如果是很大的项目,通常要很长时间,特别慢,特别耗时;增量构建就是用来解决这个问题的,构建过程中有很多个任务,如果有某些任务的输入和输出都没有改变的话,会自动跳过这个任务,也就节省了相应的时间;
举个例子:假设JavaCompile任务,接受一组Java源文件作为输入,并且生成一组类文件。Gradle使用这些信息来检查源文件是否已经更改,如果没有检测到更改,就跳过这个任务(不执行它,因为反正执行了结果也是一样的)。那~~~~~对应的任务时间也省下来了。。。
5. Gradle 包装器
Gradle Wrapper(我把它翻译成Gradle 包装器)是什么:就只是一个批处理文件(Windows环境下的bat文件,或者linux/mac环境下的shell脚本);
作用:运行Gradle的包装器,包装器脚本会自动的下载和安装一个新的Gradle运行时副本在机器上,并且执行Gradle构建;
优点:如果要启动一个新的持续集成(CI)服务器,会特别容易,因为不需要额外的配置就能执行构建;另外分发代码与他人协作也会特别方便,因为拿到代码的人可以轻松构建它;
什么是持续集成:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
6. 插件
Gradle 支持使用插件;
什么是Gradle的插件:封装了可重用构建和任务逻辑的可分发组件;
作用:扩展和定制化Gradle的功能;
例如:可以支持其他语言、创建新任务、修改现有任务功能,并通过添加新关键字来扩展构建语言。从而实现Gradle定制化。
7. 代码开源
Gradle是代码开源的
8. Gradle的替代品
Ant + Ivy
Apache Ant: http://ant.apache.org
特点:没有约定,过于灵活导致复杂、难以理解和维护build.xml文件(它的配置文件)
Apache Ivy: http://ant.apache.org/ivy/
特点:提供了自动化的依赖管理,在ivy.xml文件中声明依赖项
Ant和Ivy搭配使用,Ivy使Ant更易于维护的同时,又能进行依赖项管理
Maven
Apache Maven 是当前Java生态系统中最流行的自动化构建和依赖项管理工具;
特点:严格遵循约定大于配置,并为项目引入了标准的目录结构,还引入了声明性依赖项管理,并自动从外部存储库下载所需的依赖项。项目根目录下的pom.xml是Maven的配置文件;
小小总结
Gradle大大地简化了构建过程和自动化依赖管理,所以快来用它吧:)