项目构建工具Gradle的基本介绍!基于Groovy语言构建脚本实现Gradle项目的构建

162 阅读5分钟

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

Gradle特点

  • Gradle是一个基于JVM的富有突破性构建工具:
    • Gradle是一个开源项目,并遵循ASL许可
    • 类似ant的灵活的构建工具
    • 可切换,类似maven的基于约定约定优于配置的构建框架
    • 强大的多工程构建支持
    • 强大的基于ApacheIvy的依赖管理
    • 对已有的mavenivy仓库的全面支持
    • 支持传递性依赖管理,不需要远程仓库或者pom.xml或者ivy配置文件
    • ant式的任务和构建是gradle的第一公民
    • 基于groovy,Gradlebuild脚本使用groovy dsl编写
    • 具有广泛的领域模型支持构建

Gradle基本介绍

  • 基于声明的构建和基于约定的构建:
    • Gradle的核心在于基于Groovy 的丰富而可扩展的域描述语言DSL
    • Groovy通过声明性的语言元素将基于声明的构建推向下层,可以按照需要的方式进行组合
    • 这些元素同样也为支持Java,Groovy,OSGi,WebScala项目提供了基于约定的构建
    • 这种声明性的语言是可以扩展的.可以添加新的或增强现有的语言元素
    • 因此 ,Gradle提供了简明,可维护和易理解的构建
  • 提供语言支持以依赖为基础的编程方式:
    • 声明性语言优点在于通用任务图
    • 可以将声明性语言充分利用在构建中,提供了最大限度的灵活性,可以让Gradle适应自定义的需求
  • 构建结构化:
    • Gradle的灵活和丰富性能够支持在构建中应用通用的设计模式
      • 可以很容易地将构建拆分为多个可重用的模块,最后再进行组装
      • 但是不要强制地进行模块的拆分,不要把原本在一起的东西强行分开,比如项目结构里
    • 以创建一个结构良好,易于维护,易于理解的构建
  • 深度API:
    • Gradle允许在构建执行的整个生命周期,对核心配置及执行行为进行监视并自定义
  • Gradle的扩展:
    • Gradle有非常良好的扩展性
    • 从简单的单项目到庞大的多项目构建,都能显著地提升效率
    • 是真正的结构化构建,通过先进的增量构建功能,可以解决许多性能问题
  • 多项目构建:
    • Gradle对多项目构建的支持非常出色
      • 项目依赖是首先需要考虑的问题,允许在多项目构建当中对项目依赖关系进行建模,因为这些才是真正的问题域
      • Gradle遵守项目的布局
    • Gradle提供了局部构建的功能:
      • 如果在构建一个单独的子项目 ,Gradle会构建它所依赖的所有子项目
      • 也可以选择重新构建依赖于特定子项目的子项目
      • 这种增量构建将使得在大型构建任务中省下大量时间
  • 多种方式管理依赖:
    • Gradle对所有的管理策略都提供了方便的支持:
      • MavenIvy的远程仓库的传递依赖管理
      • 本地文件系统的jar包或目录
  • Gradle是构建集成工具:
    • Ant tasks是最重要的 ,Ant projects也是最重要的
    • Gradle对任意的Ant项目提供了深度导入,并在运行时将Ant目标target转换为原生的Gradle任务task
    • 可以从Gradle上依赖Ant targets, 增强Ant targets, 甚至在build.xml上定义对Gradle tasks的依赖
    • Gradle为属性,路径等提供了同样的整合
    • Gradle完全支持用于发布或检索依赖的MavenIvy仓库 .Gradle提供了一个转换器,用于将一个Mavenpom.xml文件转换为一个Gradle脚本
  • 易于移植:
    • Gradle能适应已有的任何结构
    • 总可以在构建项目的同一个分支当中开发Gradle构建脚本,并且能够并行进行
    • 通常建议编写测试,以保证生成的文件是一样的
    • 这种移植方式会尽可能的可靠和减少破坏性,这也是重构的最佳做法

Gradle Wrapper

  • Gradle Wrapper允许在没有安装Gradle的机器上执行Gradle构建
  • 这样对一些持续集成服务来说,对一个开源项目保持低门槛构建是非常有用的
  • Wrapper使得对客户端计算机零配置,强制使用指定的版本以减少兼容支持问题

Groovy

  • Gradle的构建脚本是采用Groovy写的,而不是用XML
  • 与其余方法不同 ,Gradle并不只是展示了由一种动态语言编写的原始脚本的强大,那样会导致维护构建变得很困难
  • Gradle的整体设计是面向被作为一门语言,而不是一个僵化的框架
  • Groovy允许通过抽象的Gradle描述个人的story,Gradle提供了一些标准通用的story, 这是相比其余声明性构建系统的主要特点
  • Groovy不止支持简单的糖衣层,整个GradleAPI都是完全groovy化的,只有通过Groovy才能去运用并提高效率

为什么使用Groovy

  • 基于一种动态语言内部DSL相比XML在构建脚本方面优势非常大
  • Gradle核心目的是作为通用构建工具 ,Gradle内部的运行环境还是主要面向Java项目