Gradle是以Groovy语言为基础,面向Java应用为主,而Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,Groovy代码能够与Java代码很好地结合,也能用于扩展现有代码。Gradle对多工程的构建支持很出色,本博文翻译自Gradle官网上的用户向导,基本上是自己在在看原文过程中的理解,在此记录下来,一些不重要的部分我会跳过,由于本人接触Gradle时间不是很长,英语水平也确实有限,如果有翻译不当的地方,麻烦大家指出,后面会不断更改。官网上面的用户向导比较长,我会随着自己的学习进度,不断更新。原文链接地址为http://gradle.org/docs/current/userguide/userguide_single.html#dependency_management,
1. Gradle简介
我们想向大家介绍一个构建系统Gradle,我们认为这对于java世界的编译技术来说是一个飞跃,Gradle提供了以下功能:
一个像Ant一样的非常灵活通用的构建工具 可切换的,像maven一样的基于约定的构建框架,却又从不锁住你(约定优于配置) 对多项目构建的强大支持 强大的依赖管理(基于 Apache Ivy) 对现有的Maven或者Ivy仓库全面支持 支持传递性依赖管理,而不需要远程仓库或pom.xml和ivy.xml文件 Ant中的task和build在Gradle是一等公民(as first class citizens),所谓的一等公民是在程序设计语言中支持其他所有实体操作的实体,包括了传递参数,赋给变量,从一个方法中返回等。例如在很都传统语言中函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作为返回值,就比较麻烦。 Groovy构建脚本 具有广泛的领域模型支持构建
1.1 关于Gradle向导
本篇向导,就像Gradle一样,是在不断的进行改变的。Gradle的一些部分的文档是不全的,一些内容可能不是完全清晰或者它假设了读者已经了解了更多的Gradle知识。我们需要您的帮助来完善这个向导文档,您可以在Gradle的官网找到对这个文档做出完善的方法。
2.概览
2.1 特征
下面是Gradle的特征列表
在Gradle的核心是基于Groovy的可以进行丰富扩展的特定领域语言。Gradle推动了基于 声明的构建到新的高度,通过提供一些可以任意组合的声明语言元素。这些元素提供了为Java, Groovy, OSGi, Web and Scala项目提供了基于约定的构建。重要的是,这些声明语言是可扩展的,可以添加自定义的元素,也可以扩展原有的元素。从而提供简洁的,易维护和理解的构建。
说明性语言位于通用任务列表之上,你可以在你的构建中使用。它提供了最大的灵活性来适应你的需求
Gradle的丰富性和灵活性允许应用通用设计原则到你的构建。举个例子,从可复用的构建逻辑来组合你的构 建是非常简单的。一些不必要的间接使用其他构建是不适合的,不要强制拆开你工程中本来属于一起的构建,从而避免把你的构建变的难于维护。最终你可以创建一个结构良好,易于维护和理解的构建。
在整个编译执行各个期间,嵌入了很多的钩子,Gradle允许您监听和定制非常核心部分的配置和执行行为。
Gradle的伸缩性非常好,它显著提高了软件构建的生产率并真正的结构化了编译,不管是简单的一个项目,或者是很大的有多个项目组成的企业级工程。通过提供增量编译方法的方式,Gradle解决了许多大型企业级构建之前遭遇的痛苦。
Gradle在多工程的构建方面是比较出色的,工程依赖的都是一等公民。Gradle允许您在多工程构建中对工程间的关系进行建模,就像是它们真的在您的问题域里面,Gradle追随您的设计而不是相反。 Gradle支持部分构建,如果您构建一个子工程,Gradle会同时构建这个子工程所依赖的其它工程,您也可以选择重新构建依赖了一个单独子工程的其他所有工程。和增量构建一起,它们为大项目的构建节省了很多时间
不同的团队选择不同的方式来管理他们的外部依赖。Gradle对各种策略都提供了方便的支持,从远程的Maven和Ivy仓库依赖到本地的jar包和目录依赖。
Ant tasks是一等公民,更为有趣的是,Ant projects也是一等公民。Gradle对任何的Ant项目都提供了深度导入,在运行时将Ant targets变成本地的Gradle 任务。您可以使用Gradle来建立对它们的依赖,增强这些项目,甚至可以在build.xml中声明对Gradle tasks的依赖。对properties和paths也提供了同样的整合。 Gradle完全支持您现在使用Maven或者Ivy仓库的基础设施的发布和检索,Gradle也提供了一个转换器来将pom.xml转换为Gradle 脚本。马上就会推出运行时导入Mave项目。
Gradle可以适配您现有的任何结构。因此您可以在产品的分支上面开发Gradle构建,它们可以和产品同时演进。我们通常建议写测试程序来确保产品的一致性,迁移的过程中破坏性尽可能的小并且要尽量可靠,这就是使用小的步伐来进行重构的最佳实现。
Gradle的构建脚本是使用Groovy语言实现的,而不是xml。但不像其它实现方式,Gradle不是简单的展示动态语言的脚本能力,那只会导致维护构建更加麻烦。整个Gradle的设计是朝着“作为一种语言而不是刚性的架构”的方向努力的。Groovy是我们的粘合剂,允许您使用Gradle提供的或者自定义的抽象的东西来实现您的逻辑,Gradle提供了一些标准实现但它们是没有任何特别之处的,这是我们相对其他声明构建系统的一个重要区别。Gradle的Groovy支持不仅仅只是外表,所有的Gradle API都是Groovy实现的,Groovy的使用使Gradle更加有效和强大。
Gradle是一个开源项目,使用了ASL liscense。
2.2 为什么使用Groovy?
我们认为一个内部DSL(基于一种动态语言)在构建脚本的时候比XML的优势是巨大的,有许多种动态语言可供选择。为什么选择Groovy?答案就存在于Gradle运行的场景。尽管Gradle的核心目标成为通用的构建工具,但是他的主要关注点还是在Java项目,在这些项目中团队成员将会非常熟悉Java。我们认为一个构建须要对于所有团队成员尽量的透明。因此,您可能会问为什么不直接使用Java作为构建脚本的语言。我们认为这是有效的问题,这会让我们的团队拥有最高的透明度和最低的学习曲线,但是由于Java的限制,这样的一种构建语言可能不会像想象的那样漂亮,有表现力,和强大。像Python,Groovy或者Ruby在这里可以做的更好。我们选择了Groovy因为他对Java开发者提供了目前为止最大的透明度。他的基本语法和Java有着同样的类型系统,包结构和其他一些方面。Groovy在这基础之上提供了更多,但是和Java有着同样的基础。对于拥有Python或者Ruby知识或者很期望来学习他们的Java开发者来说,上面的这些争论就不成立了。Gradle的设计也适合使用JRuby或者Jython来创建另外的构建脚本引擎。目前这些对于我们只是没有最高优先级而已。我们很高兴支持任何社区的努力,来创造额外的构建脚本引擎。