这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
Gradle特点
- Gradle是一个基于JVM的富有突破性构建工具:
- Gradle是一个开源项目,并遵循ASL许可
- 类似ant的灵活的构建工具
- 可切换,类似maven的基于约定约定优于配置的构建框架
- 强大的多工程构建支持
- 强大的基于ApacheIvy的依赖管理
- 对已有的maven和ivy仓库的全面支持
- 支持传递性依赖管理,不需要远程仓库或者pom.xml或者ivy配置文件
- ant式的任务和构建是gradle的第一公民
- 基于groovy,Gradle的build脚本使用groovy dsl编写
- 具有广泛的领域模型支持构建
Gradle基本介绍
- 基于声明的构建和基于约定的构建:
- Gradle的核心在于基于Groovy 的丰富而可扩展的域描述语言DSL
- Groovy通过声明性的语言元素将基于声明的构建推向下层,可以按照需要的方式进行组合
- 这些元素同样也为支持Java,Groovy,OSGi,Web和Scala项目提供了基于约定的构建
- 这种声明性的语言是可以扩展的.可以添加新的或增强现有的语言元素
- 因此 ,Gradle提供了简明,可维护和易理解的构建
- 提供语言支持以依赖为基础的编程方式:
- 声明性语言优点在于通用任务图
- 可以将声明性语言充分利用在构建中,提供了最大限度的灵活性,可以让Gradle适应自定义的需求
- 构建结构化:
- Gradle的灵活和丰富性能够支持在构建中应用通用的设计模式
- 可以很容易地将构建拆分为多个可重用的模块,最后再进行组装
- 但是不要强制地进行模块的拆分,不要把原本在一起的东西强行分开,比如项目结构里
- 以创建一个结构良好,易于维护,易于理解的构建
- Gradle的灵活和丰富性能够支持在构建中应用通用的设计模式
- 深度API:
- Gradle允许在构建执行的整个生命周期,对核心配置及执行行为进行监视并自定义
- Gradle的扩展:
- Gradle有非常良好的扩展性
- 从简单的单项目到庞大的多项目构建,都能显著地提升效率
- 是真正的结构化构建,通过先进的增量构建功能,可以解决许多性能问题
- 多项目构建:
- Gradle对多项目构建的支持非常出色
- 项目依赖是首先需要考虑的问题,允许在多项目构建当中对项目依赖关系进行建模,因为这些才是真正的问题域
- Gradle遵守项目的布局
- Gradle提供了局部构建的功能:
- 如果在构建一个单独的子项目 ,Gradle会构建它所依赖的所有子项目
- 也可以选择重新构建依赖于特定子项目的子项目
- 这种增量构建将使得在大型构建任务中省下大量时间
- Gradle对多项目构建的支持非常出色
- 多种方式管理依赖:
- Gradle对所有的管理策略都提供了方便的支持:
- Maven和Ivy的远程仓库的传递依赖管理
- 本地文件系统的jar包或目录
- Gradle对所有的管理策略都提供了方便的支持:
- Gradle是构建集成工具:
- Ant tasks是最重要的 ,Ant projects也是最重要的
- Gradle对任意的Ant项目提供了深度导入,并在运行时将Ant目标target转换为原生的Gradle任务task
- 可以从Gradle上依赖Ant targets, 增强Ant targets, 甚至在build.xml上定义对Gradle tasks的依赖
- Gradle为属性,路径等提供了同样的整合
- Gradle完全支持用于发布或检索依赖的Maven或Ivy仓库 .Gradle提供了一个转换器,用于将一个Maven的pom.xml文件转换为一个Gradle脚本
- 易于移植:
- Gradle能适应已有的任何结构
- 总可以在构建项目的同一个分支当中开发Gradle构建脚本,并且能够并行进行
- 通常建议编写测试,以保证生成的文件是一样的
- 这种移植方式会尽可能的可靠和减少破坏性,这也是重构的最佳做法
Gradle Wrapper
- Gradle Wrapper允许在没有安装Gradle的机器上执行Gradle构建
- 这样对一些持续集成服务来说,对一个开源项目保持低门槛构建是非常有用的
- Wrapper使得对客户端计算机零配置,强制使用指定的版本以减少兼容支持问题
Groovy
- Gradle的构建脚本是采用Groovy写的,而不是用XML
- 与其余方法不同 ,Gradle并不只是展示了由一种动态语言编写的原始脚本的强大,那样会导致维护构建变得很困难
- Gradle的整体设计是面向被作为一门语言,而不是一个僵化的框架
- Groovy允许通过抽象的Gradle描述个人的story,Gradle提供了一些标准通用的story, 这是相比其余声明性构建系统的主要特点
- Groovy不止支持简单的糖衣层,整个Gradle的API都是完全groovy化的,只有通过Groovy才能去运用并提高效率
为什么使用Groovy
- 基于一种动态语言内部DSL相比XML在构建脚本方面优势非常大
- Gradle核心目的是作为通用构建工具 ,Gradle内部的运行环境还是主要面向Java项目