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来创建一个新的构建脚本引擎,不过这并不是我们目前的最高优先级任务。我们非常乐意支持任何社会团体和个人来实现一个额外构建引擎。
http://www.cnblogs.com/wisekingokok/p/5113954.html
Gradle 2.0用户手册——总览(译)(转)的更多相关文章
- Anki 2.0 用户手册
Anki 2.0 用户手册 目录 Anki 2.0 用户手册 视频介绍 卡片和模板 Javascript Anki 2.0 用户手册 视频介绍 共享牌组和基础复习技巧 调换卡片正反面 卡片样式设计 亲 ...
- MINA2.0用户手册中文版
MINA2.0用户手册中文版--第一章 MINA2.0入门 MINA2.0用户手册中文版--第二章 第一节 MINA应用程序架构 MINA2.0用户手册中文版--第二章 第二节 TCP服务端实例 MI ...
- 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 ...
- 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 ...
- Could not find com.android.tools.build:gradle:3.0.0-alpha3
最近使用Android Studio 3.0 canary 3 时新建项目遇到标题所示错误,后网上找到解决办法.记录如下: 在项目的build.gradle文件中添加如下内容即可解决. reposit ...
- 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 ...
- 项目自动化建构工具gradle 入门0——环境 & 废话
gradle 是一个项目自动化构建工具.同类的产品还有ant ,maven等等.相比之下我更喜欢gradle,它语法简洁.兼容maven.ide集成很好. 学习使用gradle最快的方式是看文档,而且 ...
- Angular4.0.0发布总览文章
翻译自angular.io上的关于4.0.0版本发布的文章,内容主要是介绍了4.0.0版本下的改进以及接下来还会有的其他更新,4.0.0其实已经出来好多天了,截止目前都已经到了4.0.1版本了,这也是 ...
- thinkphp5.0架构总览
ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V) ...
随机推荐
- mongodb实现简单的增删改查
package mongoDB; import java.net.UnknownHostException; import java.util.ArrayList; import java.util. ...
- windows phone (24) Canvas元素A
原文:windows phone (24) Canvas元素A Canvas元素表示定制一个区域,并可以通过相对坐标定义子元素位置,在一下情况下Canvas是不可见的 Height 属性等于 0. W ...
- Windows远程桌面连接Ubuntu 14.04 (转)
由于xrdp.gnome和unity之间的兼容性问题,在Ubuntu 14.04版本中仍然无法使用xrdp登陆gnome或unity的远程桌面,现象是登录后只有黑白点为背景,无图标也无法操作.与13. ...
- IOS开发-表视图LV3导航控制器
学到这里感觉有点难了,其实这篇文章再草稿箱里放了好久了~ 最近对于学习的热情下降了.这不行-抓紧学习走起! 在这一章节的学习中主要针对导航控制器及表视图来建立多视图的应用, 首先要了解一些概念-- 1 ...
- gitLab添加ssh key
电脑新装了一台虚拟机,想要和gitLab建立一个安全的ssh连接,步骤如下 1.本机生成ssh key 系统环境:Linux 使用root用户登录,执行命令:ssh-keygen -t rsa -C ...
- 代写java程序qq:928900200
学校为全面提升学校教学质量,提高管理水平,决定开发一套小型成绩管理系统,实现以下功能.1) 系统用户分为管理员.教师和学生三种角色,每种角色都可以包含若干个用户.其中管理员登录后可以进行教师.学生 ...
- WPF中的三维空间(1)
原文:WPF中的三维空间(1) WPF中可以创建三维几何图形,支持3D对象的应用,支持从3D Max等软件将3D文件obj导入设计中,但是目前还不支持将材质同时导入,这样需要在WPF中对3D对象重新设 ...
- Windows Phone 8 - 建立App专属联络人资讯(ContactStore)
原文:Windows Phone 8 - 建立App专属联络人资讯(ContactStore) 在WP7的时候介绍了如何操作联络人的功能,例如:<Windows Phone 7 - 存取联络人与 ...
- SQL 编码标准
1. 你必须从别名表,易于使用的表,该表列 实例 select owner,object_id,name from a,b where a.id=b.id; 假设是不正确的别名表.我知道你是怎么访问表 ...
- CodeForces 10C. Digital Root
乞讨A.B.C ∈[1.N] && A*B != C,d(A*B) == d(C)组的数量. 首先要知道d(x) = (x%9 == 0 ? 9 : x%9); 那么则会有A*B == ...