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. [置顶] 轻量级语言Lua入门

    作为一个脚本爱好者,而且是脚本(Perl)起家的我,一有空就喜欢学习下这些脚本语言.据说魔兽世界.愤怒小鸟都用到了它,所以今天研究下Lua这个叫法有点奇特的脚本 [转载请注明出处:http://blo ...

  2. poj1260

    给定n类等级的珍珠 每类的珍珠都有需求的个数ai,和价格pi 为了防止游客只买1颗珍珠,所以购买ai个珍珠时,要加上10个的价格 即(ai+10)*pi 有时,购买高等级的珍珠代替低等级的珍珠时,可能 ...

  3. windows phone 了解LinearGradientBrush类和RadialGradienBrush类(11)

    原文:windows phone 了解LinearGradientBrush类和RadialGradienBrush类(11) 我们了解到在能在xaml中完成的设计,一般在隐藏文件中也可通过代码完成: ...

  4. 解决tomcat开始出现in production environments was not found on the java.library.path:xxx

    如图所看到的,Eclipse中启动tomcat时出现not found on the java.library.path等信息.能够通过下载tomcat-native-1.1.32-win32-bin ...

  5. siwft初学(一)

    今天刚開始学习swift语言.首先须要下载xcode6 beta版本号.正式版本号然后会公布.自己学习总结一下,假设有误.请大家指出. 创建project的时候.language选择swift语言. ...

  6. Android 自己的自动化测试(2)依据ID查找对象(java)

    前一篇文章是写 Android 自己的自动化测试(1)如何安装和卸载应用程序(java) ,以下再探索一下假设在普通java应用程序中,依据ID来查找对象 1.类库依赖: The library de ...

  7. ICTCLAS用的字Lucene4.9捆绑

    它一直喜欢的搜索方向,虽然无法做到.但仍保持了狂热的份额.记得那个夏天.这间实验室.这一群人,一切都随风而逝.踏上新征程.我以前没有自己.面对七三分技术的商业环境,我选择了沉淀.社会是一个大机器,我们 ...

  8. tomcat 重启进程

    查看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是 ...

  9. android学习经常使用的数据文件夹

    android工程实践 1.仿360一键清理实现(一) "一键清理"是一个桌面图标,点击图标后,显示一个视图.进行清理动画.之后显示清理了几个进程,释放了多少M内存.点击" ...

  10. js“分享到”侧边框伸缩实现

    思路: 1,临界值是 -150 和 0 如果大于临界值,就要隐藏 2,隐藏:速度为负 显示:速度为正 3,如果与临界值相等,就清空定时器 否则,就运动 ------------------------ ...