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来创建一个新的构建脚本引擎,不过这并不是我们目前的最高优先级任务。我们非常乐意支持任何社会团体和个人来实现一个额外构建引擎。

http://www.cnblogs.com/wisekingokok/p/5113954.html

Gradle 2.0用户手册——总览(译)(转)的更多相关文章

  1. Anki 2.0 用户手册

    Anki 2.0 用户手册 目录 Anki 2.0 用户手册 视频介绍 卡片和模板 Javascript Anki 2.0 用户手册 视频介绍 共享牌组和基础复习技巧 调换卡片正反面 卡片样式设计 亲 ...

  2. MINA2.0用户手册中文版

    MINA2.0用户手册中文版--第一章 MINA2.0入门 MINA2.0用户手册中文版--第二章 第一节 MINA应用程序架构 MINA2.0用户手册中文版--第二章 第二节 TCP服务端实例 MI ...

  3. Error:Could not find com.android.tools.build:gradle:3.0.0

    Error:Could not find com.android.tools.build:gradle:3.0.Searched in the following locations:    file ...

  4. Could not find com.android.tools.build:gradle:3.0.0-alpha1 in circle ci

      Error:(1, 0) The android gradle plugin version 3.0.0-alpha1 is too old, please update to the lates ...

  5. Could not find com.android.tools.build:gradle:3.0.0-alpha3

    最近使用Android Studio 3.0 canary 3 时新建项目遇到标题所示错误,后网上找到解决办法.记录如下: 在项目的build.gradle文件中添加如下内容即可解决. reposit ...

  6. Gradle打包问题Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0

    前言 使用gradle打包react native的时候,出现了如下报错,下面和大家说一下解决的具体办法 Deprecated Gradle features were used in this bu ...

  7. 项目自动化建构工具gradle 入门0——环境 & 废话

    gradle 是一个项目自动化构建工具.同类的产品还有ant ,maven等等.相比之下我更喜欢gradle,它语法简洁.兼容maven.ide集成很好. 学习使用gradle最快的方式是看文档,而且 ...

  8. Angular4.0.0发布总览文章

    翻译自angular.io上的关于4.0.0版本发布的文章,内容主要是介绍了4.0.0版本下的改进以及接下来还会有的其他更新,4.0.0其实已经出来好多天了,截止目前都已经到了4.0.1版本了,这也是 ...

  9. thinkphp5.0架构总览

    ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V) ...

随机推荐

  1. 《Javascript高级程序设计》读书笔记之继承

    1.原型链继承 让构造函数的原型对象等于另一个类型的实例,利用原型让一个引用类型继承另一个引用类型的属性和方法 function SuperType() { this.property=true; } ...

  2. JS学习笔记-OO疑问之对象创建

    问一.引入工厂,解决反复代码 前面已经提到,JS中创建对象的方法,不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门 ...

  3. 编译gRPC

    编译gRPC 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 无论通过哪种语言调用gRPC,都必须要编译gRPC,因为生成proto访问类时,除了产生标准的数据定义 ...

  4. Android实现限制EditText输入文字的数量

    一: 声明控件.          TextView hasnumTV;         TextView hasnum;// 用来显示剩余字数         int num = 50;// 限制的 ...

  5. android贴士Toast

    转载请注明出处:http://blog.csdn.net/droyon/article/details/42009015 我们可以用androd提供toast控制,但在使用过程中,给我们发了很多Toa ...

  6. 请注意CSDN社区微通道,许多其他的精彩等着你

    CSDN社区微信公众号"程序人生"(微信ID:coder_life)来了,每天我们会将CSDN社区中大量的优质内容浓缩成1~3篇文章.推送到您的手机中,让您不管何时何地都能感受到知 ...

  7. javascript 的bind/apply/call性能

    javascript有两种使用频率非常高的三个内置的功能:bind/apply/call.许多技术是基于高点,这些功能实现.这三个功能被用来改变的功能运行环境.从而达到代码复用的目的. 先来所说bin ...

  8. UIScrollViewA都PI得知。

    //1.设定滚定条的样式 typedef NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) { UIScrollViewIndicatorStyleDefa ...

  9. arch linux设备(请参考官方文档,桌面安装没有找到一个好工作后)

    首先,启动安装系统(一获得通过vmware虚拟机) 1.设置键盘布局 #loadkeys "us" #设置为美国的键盘布局.一般能够默认就可以 2.建立硬盘的分区 我採用的是fdi ...

  10. WPF技术触屏上的应用系列(五): 图片列表异步加载、手指进行缩小、放大、拖动 、惯性滑入滑出等效果

    原文:WPF技术触屏上的应用系列(五): 图片列表异步加载.手指进行缩小.放大.拖动 .惯性滑入滑出等效果 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统, ...