Chapter 2. Overview 总览

2.1. Features 特性

下面列出了一些 Gradle 的特性:

Declarative builds and build-by-convention 声明式构建,符合公约

Gradle 的核心是在 基于 Groovy 对 Domain Specific Language (DSL)语言进行一个丰富的扩展。Gradle 通过提供声明式语言元素,根据个人喜好可以将声明式构建推到下一个级别。这些元素也提供支持 Java、Groovy、OSGi、Web 和 Scala 项目。同时,这个声明式语言是可扩展的。可以添加您自己的新语言元素或增强现有的元素,从而提供简洁、易于维护和易于理解的构建。

Language for dependency based programming 依赖型编程语言

声明式语言位于一个通用的任务图,你可以充分利用你的构建。它提供了适应您的独特需求的最大灵活性的 Gradle。

Structure your build 良好的结构

Gradle 的柔软性和丰富性允许您用一般性设计原则来构建项目。例如,从可重用的构建逻辑片段来组成你的构建是非常容易的。 多余不必要的内联的东西是不适当的。 不要强制把属于一起的东西分开(例如在您的项目层次结构中)。 避免像像猎枪的气味那样变化,从而使你的构建成为一个维修噩梦。 最后,你可以创建一个结构良好、易于维护、易于理解的构建。
可理解构建

Deep API 深层次的API

在整个生命周期的构建执行过程中,可以方便内嵌使用 Gradle 的各种钩子,从而为您监视和自定义配置和执行行为。

Gradle scales 可伸缩

Gradle 伸缩性能非常好。它会增加你的生产力,从简单的单项目到建立庞大的企业多项目建设。这对于组织构建是正确的。通过最先进的增量构建功能,可以真正的解决许多大型企业构建遭受的性能痛苦。

Multi-project builds 多项目构建

Gradle 的多项目构建支持是非常优秀的。项目依赖是一等公民。我们允许您在多项目构建中建模项目关系,因为它们是真实放映您的问题域。 Gradle 会遵循你的布局,反之亦然。

Gradle 提供部分构建。 如果构建单个子项目,Gradle 将负责构建该子项目所依赖的所有子项目。 您还可以选择重建依赖于特定子项目的子项目。再加上增量构建,对于较大的构建这很节省很多时间。

Many ways to manage your dependencies 多途径管理依赖

不同的团队喜欢不同的方式来管理他们的外部依赖。Gradle 提供任何便捷的策略支持。从远程 Maven 和 Ivy 库的依赖管理与到本地文件系统上 jars 或目录。

Gradle is the first build integration tool Gradle 是一等构建集成工具

Ant 任务是一等公民。更有趣的是,Ant 的项目也都是一等公民。Gradle 提供深入的引用给 Ant 项目,在运行时,可以转换 Ant 目标到 原生的Gradle 任务。你可以依靠他们的工具,可以提高他们的工具,你甚至可以在build.xml 宣布对 Gradle 任务的依赖。相同的集成提供了性能,路径,等…

Gradle 支持现有的 Maven 或 Ivy 仓库依赖关系。工具还提供了一个转换器将 Maven pom.xml 转成 Gradle 脚本。Maven 项目运行的进口就快来了。

Ease of migration 易迁移

Gradle 可以适应任何已有的结构。因此,您可以随时在同一个分支中开发您的 Gradle 构建,使你的产品构建可以并行演化。 我们通常建议编写测试,确保生成的工件是相似的。 这样迁移的破坏性越小,越可靠越好。这是继重构应用小步骤的最佳实践。

Groovy 语言

Groovy 的构建脚本是用 Groovy,不是 XML。但是,不像其他的方法,这不是简单地将动态语言的原始脚本进行能力的扩展。这只会导致一个保持非常困难的构建。工具的总体设计是面向的是将 Gradle 作为一种语言,而不是一个严格的框架。工具提供了一些标准的故事,但他们不做任何形式的限制。这是我们的一个主要特点。

Gradle 的构建脚本是用 Groovy 编写的,而不是 XML。 但不同于其他方法,这不是简单地暴露动态语言的原始脚本功能,这只会导致一个非常难以维护的构建。 Gradle 的整个设计面向被用作一种语言,而不是一个僵硬的框架。 Groovy 允许你用 Gradle(或你)提供的抽象来讲述你的个人故事(story)。

Gradle 提供了一些标准的故事,但是它们没有任何形式的特权。与其他声明式构建系统相比,这是一个重要的区别特性。 我们的 Groovy 支持不仅仅是糖衣。 整个 Gradle API 是完全 Groovy 化的。 添加 Groovy 结果,从而可以获得愉快而富有成效的体验。

The Gradle wrapper 关于Gradle Wrapper

该 Gradle 包装允许你机器上没有安装Gradle工具也能执行 Gradle 的构建。这对于例如一些连续集成服务器是非常有用的。 它对于一个开源项目来说也是有用的,可以以低门槛的前提来建立它。 Gradle Wrapper 对于企业也很有趣。 它对客户机来说是零管理。 它还强制使用特定的 Gradle 版 本,从而减少了支持问题。

Free and open source 免费开源

Gradle 开源项目,遵守ASL开源协议

2.2. Why Groovy? 为啥用 Groovy

我们认为,当使用构建脚本作为内部 DSL (基于动态语言)比 XML 有更大的优势。有很多动态语言,但为啥是 Groovy?答案是在于上下文工具的操作。虽然 Gradle 是一个通用的构建工具,这是它的核心,但它的主要焦点还是是 Java 项目。在这样的项目中,团队成员更加熟悉 Java。我们考虑的是编译应该都所有成员来说是尽可能的透明。

你可能会说,为什么不使用 Java 作为构建脚本。这里有一个问题,就是对于团队的最高的透明度和最低的学习曲线,但是 由于 Java 语言的限制,作为构建语言效果并不理想(参考 http://www.defmacro.org/ramblings/lisp.html 可以看到 Ant, XML, Java 和 Lisp 的对比,有趣的是,Java 的语法实际上是 Groovy 的语法 )。其他语言, Python, Groovy 或者 Ruby 都更能胜任这个工作。我们选择 Groovy 是因为对于 Java 使用者来说有更高的透明度。它的基本语法与 Java 类似,包括 本文系统,包结构和其他方面。Groovy 提供了最重要内容但都是符合 Java 基础功能的。

对于对 Python 或 Ruby 知识拥有强烈的学习欲望的 Java 开发者来说,上述论点不适用。该工具的设计非常适合于创建另一个建立在 JRuby 和Jython 脚本引擎。对于我们来说暂时它只是不具有最高优先级。我们高兴地支持任何社区的努力来创建额外的构建脚本引擎。