Gradle 2.0用户手册——总览(译)
2.1 特性
本章将介绍一系列Gradle的特性。
申明式构建和基于约定的构建
Gradle的核心是基于Groovy呈现了一种丰富的针对特定领域的语言,称之为Domain Specific Language(DSL)。通过自由的申明式语言元素,Gradle将申明式构建推向了一个新的高度。这些元素也提供了基于约定构建的功能,用于支持Java,Groovy,OSGI,Web和Scala项目。而且,这种申明式语言是可以扩展的。你可以增加一些新的元素,或者对已有的元素进行增强,以此实现简明的,易于维护和可读性高的构建。
基于依赖的编程语言
因为声明式语言位于任务图顶端,所以你可以完全放心的将Grale加入到你的构建。它提供了足够的灵活性以应对各式各样的项目。
构建结构化
因为Gradle具有强大的功能以及容易使用的特点,你可以随意在你的构建中添加通用的设计法则。例如:通过可复用的构建逻辑轻松构建。不应当存在不必要的内联关系。不要强行分离已经在一起的部分(例如:项目层级关系)。避免分散的变化,那样会让项目变得难以维护。总之,你可以创建一个结构合理,易于维护,容易理解的构建。
底层API
在运行构建的生命周期里有,Gradle提供了很多内嵌的钩子,这让你可以从它的核心来监控和自定义它的配置和执行逻辑。这是非常让人愉悦的一个特性。
Gradle Scales
Gradle Scales真的非常棒,从简单的单一Project架构到大型的企业级多Project架构,它都能从容应付,带来显著的效率提升。
多项目构建
Gradle的多项目构建功能是十分杰出的。项目依赖十分重要。Gradle允许用户在一个多项目构建中去塑造它们之间的依赖关系。Gradle遵循用户的意图,而不是让用户反过来按照Gradle的要求去完成构建。
Gradle也可以完成局部构建,如果你试图构建一个子项目,Gradle会将此子项目依赖的子项目都进行构建。你也可以选择重新构建子项目所依赖的其他子项目。这样可以在一些大项目里节省很多时间。
多种方法管理依赖
不同的团队有不同的依赖管理方法。Gradle提供了方便的方式以支持各种策略。不论是从Maven仓库或Ivy仓库的依赖传递管理,还是本地系统的文件夹或Jar包依赖,Gradle都能从容应付。
Gradle是第一个集成构建工具
Ant任务优先被支持。更重要的是Ant项目也被很好的支持。Gradle提供底层的导入以支持Ant项目,在运行的时候,Ant 的任务将转换为native的Gradle任务。你可以通过Gradle依赖或者增强它们,甚至可以在你的build.xml里声明它们的依赖关系。同样的,也可以继承properties,paths等等。
Gradle完全支持已有的Maven或者Ivy仓库来构建实现发布和检索依赖,Gradle也提供了一个将Maven的pom.xml转换为Gradle脚本的转换器。在运行时导入Maven项目也很快会被引入。
便于迁移
Gradle能适配各种结构。因此你总是可以并行的去构建你项目中的不同分支。通常我们建议编写一些测试来确保这些分支是相同的。通过这种方法可以让迁移变得更加可靠。这是使用依葫芦画瓢的方式来获取的最佳重构实践。
Groovy
Gradle构建脚本是通过Groovy编写,而不是通过XML。和其他方式不同的是这并不仅仅只是生硬的展示动态语言的强大能力。那样的话会让构建维护变得十分困难。Gradle的整体设计是为了让Gradle成为一种被广泛使用的语言,而不仅仅只是一个僵硬的框架。Groovy是连接Gradle和你的项目的纽带。Gradle提供了一些标准的应用场景,然而这些场景并没有设么特殊的地方。Gradle的Groovy支持不仅仅只是一个噱头。Gradle的API看上去和Groovy非常的相似,这是一种非常愉快和可靠的体验。
Gradle Wrapper
Gradle wrapper使得你可以在没有安装Gradle的环境执行Gradle构建。在一些连续集成的服务器上,这显得十分有用。同样的,Gradle wrapper也使得一些开源项目变得容易构建。Gradle wrapper对企业来说也很有吸引力,因为对于终端机器并不需要任何的管理方式,并且可以指定适用特定的Gradle版本来避免一些可能产生的问题。
免费并且开源
Gradle是一个基于 ASL 协议的开源项目。
2.2 为什么是Groovy?
我们认为当运行构建脚本时,一个在XML之上的内部DSL(基于动态语言)的优势是显而易见的。目前有很多种这样的语言,为什么是Grooby呢?原因在于Gradle是应用环境。虽然Gradle的核心目标是作为一个构建工具,但是它的主要应用场景却是在Java项目里,这些项目里的成员都非常熟悉Java。我们认为一个构建最好对于它的所有应用者都应该是容易学习和熟悉的,所以选择了Groovy。
基于上述原因,你可能会问为什么不直接使用Java作为构建脚本的语言。我们认为这是一个很好的问题。如果直接使用Java作为构建脚本的语言,可能对于你的团队来说是最容易接受,学习成本最低的方案,但是因为Java语言自身的局限性,将Java作为构建语言并不是很好的方案(在 这里 你可以找到答案,这里很好的比较了Ant,XML,Java和Lisp),像Python,Groovy或者Ruby都会比java更适合完成构建工作。我们选择Groovy就是为了为Java开发者提供最低的学习曲线,它的基本语法,符号,包结构等都非常接近于Java,Groovy不仅与java有着共同的基础,而且还提供了更多的特性。
对于那些同时具有Python或Ruby的Java开发者,以上解释也许不能接受。Gradle非常适合使用JRuby或者Jython来创建一个新的构建脚本引擎,不过这并不是我们目前的最高优先级任务。我们非常乐意支持任何社会团体和个人来实现一个额外构建引擎。
</div>