第二章 概述
目录
2.1. 特征
这里是一些Gradle的功能列表。
声明式构建和按照惯例构建
Gradle的核心是一个基于Groovy的丰富的可扩展域特定语言(DSL)。Gradle通过提供声明式语言元素,将声明式构建推向下一个层次,您可以随意组合。这些元素还为Java,Groovy,OSGi,Web和Scala项目提供了逐个会议的支持。甚至更多,这种说明性的语言是可扩展的。添加您自己的新语言元素或增强现有语言元素,从而提供简洁,可维护和易于理解的构建。用于依赖编程的语言
声明性语言位于通用任务图之上,您可以充分利用您的构建。它提供了极大的灵活性,使Gradle适应您的独特需求。构建你的构建
Gradle的灵活性和丰富性最终使您可以将常用的设计原则应用于您的构建。例如,从构建逻辑的可重用部分组成构建是非常容易的。内联的东西,不必要的indirections是不合适的。不要被强迫拆散属于一起的东西(例如在你的项目层次结构中)。避免像霰弹枪的变化或不同的变化,把你的构建成为维修噩梦的气味。最后,您可以创建一个结构良好,易于维护,易于理解的构建。深度API
从被嵌入到构建执行的整个生命周期的许多钩子中,Gradle允许你监视和定制其配置和执行行为到其核心。Gradle秤
Gradle比例很好。它显着提高了您的生产力,从简单的单一项目建立到庞大的企业多项目生成。这是构建构建的真实情况。借助先进的增量构建功能,解决许多大型企业构建的性能问题也是如此。|多项目构建
Gradle对多项目构建的支持非常出色。项目依赖是一等公民。我们允许您在多项目构建中为项目关系建模,因为它们确实适合您的问题域。Gradle遵循你的布局,反之亦然。Gradle提供了部分构建。如果您构建一个子项目,Gradle负责构建子项目所依赖的所有子项目。您也可以选择重建依赖于特定子项目的子项目。与增量构建一起,这对于大型构建来说是一个很大的节省时间。
许多方法来管理你的依赖关系
不同的团队更喜欢不同的方式来管理他们的外部依赖。Gradle为任何策略提供了便利的支持。从远程Maven和Ivy存储库的传递依赖管理到本地文件系统上的jar或目录。Gradle是第一个构建集成工具
蚂蚁任务是一等公民。更有趣的是,蚂蚁项目也是一流的公民。Gradle为任何Ant项目提供了深入的导入,在运行时将Ant目标转换为本地Gradle任务。您可以从Gradle中依赖它们,您可以从Gradle中增强它们,甚至可以在build.xml中声明对Gradle任务的依赖关系。为属性,路径等提供了相同的集成。
Gradle完全支持现有的Maven或Ivy存储库基础结构,用于发布和检索依赖关系。Gradle还提供了一个将Maven pom.xml转换为Gradle脚本的转换器。Maven项目的运行时导入即将到来。
易于迁移
Gradle可以适应任何你有的结构。因此,您可以始终在您的生产构建所在的同一分支中开发您的Gradle构建,并且可以并行演化。我们通常建议编写测试,确保产生的文物是相似的。这样迁移就不那么具有破坏性和可靠性。这是遵循通过应用婴儿步骤进行重构的最佳实践。Groovy的
Gradle的构建脚本是用Groovy编写的,而不是XML。但是与其他方法不同,这不是简单地暴露动态语言的原始脚本功能。这只会导致维护建设非常困难。Gradle的整个设计都是作为一种语言来使用的,而不是一个僵化的框架。而Groovy是我们的胶水,可以让你用Gradle(或者你)提供的抽象来讲述你的个人故事。Gradle提供了一些标准的故事,但他们没有任何形式的特权。与其他声明式构建系统相比,这对我们来说是一个重要的特色。我们的Groovy支持不仅仅是糖衣。整个Gradle API是完全Groovy化的。添加Groovy会带来愉快和高效的体验。Gradle包装
Gradle Wrapper允许您在没有安装Gradle的机器上执行Gradle构建。这对于一些持续集成服务器来说是有用的。对于一个开源项目来说,保持构建它的屏障是很有用的。包装对于企业来说也很有意思。这是客户端机器的零管理方法。它还强制使用特定的Gradle版本,从而最大限度地减少支持问题。自由和开源
Gradle是一个开源项目,并在ASL下获得许可。
2.2.为什么选择Groovy?
我们认为,在构建脚本中使用内部DSL(基于动态语言)优于XML的优点是巨大的。那里有几种动态语言。为什么选择Groovy?答案在于Gradle运行的环境。虽然Gradle是一个通用的构建工具,但它的主要焦点是Java项目。在这样的项目中,团队成员将非常熟悉Java。我们认为一个构建应该尽可能的透明给所有的团队成员。
在这种情况下,您可能会争论为什么我们不只是使用Java作为构建脚本的语言。我们认为这是一个有效的问题。它会为你的团队提供最高的透明度和最低的学习曲线,但是由于Java的限制,这样的构建语言将不会像表面上那么好,而且功能强大。[1]像Python,Groovy或Ruby这样的语言在这里做得更好。我们选择了Groovy,因为它为Java人提供了最大的透明度。它的基本语法和Java以及它的类型系统,它的包结构和其他东西一样。除此之外,Groovy还提供了更多的功能,但是却拥有Java的通用基础。
对于具有Python或Ruby知识的Java开发人员或希望了解这些知识的人,上述论点不适用。Gradle设计非常适合在JRuby或Jython中创建另一个构建脚本引擎。目前对我们来说,这并不是最重要的。我们高兴地支持任何社区努力创建额外的构建脚本引擎。
[1]在http://www.defmacro.org/ramblings/lisp.html,你会发现一篇比较有趣的文章,比较Ant,XML,Java和Lisp。有趣的是,如果本文中的“如果Java有这种语法”语法实际上就是Groovy语法。