Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

1、可表达性的构建语言

  在Gradle脚本中每一个元素都有一个与Java类一对一的映射。在许多情况下Groovy化的类相对于Java,代码更加简洁,并且允许使用如闭包这样的新语言特性。

2、Gradle就是Groovy

  Ant和maven这样杰出的构建工具使用XML来定义他们的构建逻辑。XML很容易读和写,但是如果内容太多就不容易维护了。XML并不具备很强的表达性,这使得它很难定义复杂的定制逻辑。Gradle采用一种不同的方式,是一种具有可读性和表达性的构建语言。能够用编程语言来表达你需要的构建是Gradle的一大亮点。

3、灵活的约定

  Gradle针对你的项目给予指导和有意义的默认值。Gradle中的每个Java项目都确切的知道源代码和测试类文件的位置。但改变默认值也非常的简单,通过约定属性即可改变。Gradle的约定和maven提供的约定相似,但不会让你感觉到被限制。maven非常武断,它建议一个工程包含一个Java源代码目录且只产生一个jar文件。Gradle允许你轻松的打破约定。ant不会给你任何关于如何组织构建脚本方面的指导,以确保最大程度的灵活性。Gradle则折中选择和,即提供约定,又给予你改变约定的能力。Gradle是不武断工具上的一个武断的框架。

4、鲁棒和强大的依赖管理

  项目会依赖第三方组件,你编译好的组件也可能会被其他团队所依赖。外部依赖通过仓库获得,而仓库的类型各种各样,从纯文件系统到成熟的企业仓库。外部依赖还可能存在对其他类库或资源的引用——传递性依赖。Gradle提供了一个基础设施去管理解析、获取和存储依赖的复杂性。一旦他们被下载并存储到本地缓存中,你的项目就可以使用了。

5、可扩展的构建

  Gradle支持通过指定任务的输入和输出进行增量型构建。它准确的找出哪些任务需要跳过,哪些需要构建或者部分构建。Gradle会负责重新构建需要的部分。
  自动化测试、集成测试和功能测试是构建过程的一部分。将需要短时间运行的测试和那些需要准备资源和外部依赖的测试分离是有意义的。Gradle支持测试的并行执行。

6、轻松的可扩展性

  大部分企业构建都不一样,它们也不会解决相同的问题。一旦完成了建立基本构建脚本的初始化阶段,你就会开始实现定制逻辑。Gradle提供一种可以在类定义中写定制化逻辑的方法,这样可以让维护和编写代码更简单。如果你想要在多个构建或者项目中分享可重用代码,Gradle提供插件这种扩展机制。而且写一个插件也非常的简单。

7、和其他构建工具的集成

  Gradle与Ant、Maven、Ivy可以做很好的集成。对于Ant,Gradle允许你导入现有的构建逻辑并重用标准的Ant任务。Gradle与maven和Ivy仓库100%兼容。你可以从中获取依赖,也可以发布工件。对于已有的maven构建,Gradle提供了一个转换器可以将构建逻辑转换为Gradle的构建脚本。

8、社区和公司的推动

  除了Gradle中标准的插件,Gradle社区几乎每天都会发布新的功能(可重用的插件)。Gradleware是Gradle背后的技术服务和支持公司。它不仅提供了关于Gradle的专业建议,它的目标更是指向了更大范围的企业级别的自动化咨询。

总结

  总结起来,Gradle是一个为企业准备的构建系统,由具有声明式和表达性的Groovy的DSL支持。它结合了灵活性和基于约定优于配置思想的扩展性,以及对传统依赖管理的支持。它背后有一个专业的服务公司(Gradleware)和强大的社区参与,Gradle成为了许多开源项目和企业构建方案的第一选择。

Gradle引人注目的特性集的更多相关文章

  1. Android Gradle 配置选项合集

    //让gradle 引入构建安卓app的插件 apply plugin: 'com.android.application' //自定义变量, 使用的时候不需要 ext 前缀 ext { minSdk ...

  2. JAVA8新特性--集合流操作Stream

    原文链接:https://blog.csdn.net/bluuusea/article/details/79967039 Stream类全路径为:java.util.stream.Stream 对St ...

  3. docker mesos集群资源调度平台

    mesos原理与架构 首先,再次需要强调 Mesos 自身只是一个资源调度框架,并非一整套完整的应用管理平台,所以只有 Mesos 自己是不能干活的.但是基于 Mesos,可以比较容易地为各种应用管理 ...

  4. [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  5. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  6. (转)C++0x语言新特性一览

    转自:http://blog.csdn.net/zwvista/article/details/2429781 原文请见http://en.wikipedia.org/wiki/C%2B%2B0x. ...

  7. Gradle命令行黑魔法

    毫无疑问,现在Gradle已经成为java世界最火的构建工具,风头已经盖过了冗余的ant,落后的maven.Gradle是以Groovy语言编写的一套构建脚本的DSL,由于Groovy语法的优雅,所以 ...

  8. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  9. C++0x新特性

    我是在一个帖子上摘抄的大神语录...感谢supermegaboy大神,给了详尽的解释 下文是一篇转载的Wikipedia的译文,从语言和库双方面概述了C++0x. 右值引用与转移语义 在标准C++语言 ...

随机推荐

  1. laravel框架生產vender文件夹

    方法一.修改拓展 去php.ini中查看下面三个扩展项是否开启 extension=php_fileinfo.dll extension=php_mbstring.dll extension=php_ ...

  2. linux 使用不安全的sprintf函数,存储字符越界导致程序莫名崩溃问题

    linux c++编程 问题背景: 在处理一个公共模块的代码中,其中有以下代码片段 //代码片段-组合一组字符串并存放到szSignKey数组中 ] = {}; sprintf(szSignKey, ...

  3. 【HTML5】HTML5中video元素事件详解(实时监测当前播放时间)

    html 代码..video后边几个元素,可处理ios 系统的兼容性 <video id="myVideo" controls="controls" po ...

  4. 如何写Emit代码

    写Emit代码也不是想象中的那么复杂,基本过程就是先手工写好C#代码,编译得到Exe或者Dll,然后用ILDASM或反编译工具,得到IL代码,最后就是看着IL代码,用Emit一个个对应发出代码,就行了 ...

  5. 【CF613D】Kingdom and its Cities 虚树+树形DP

    [CF613D]Kingdom and its Cities 题意:给你一棵树,每次询问给出k个关键点,问做多干掉多少个非关键点才能使得所有关键点两两不连通. $n,\sum k\le 10^5$ 题 ...

  6. Github Upload Large File 上传超大文件

    Github中单个文件的大小限制是100MB,为了能突破这个限制,我们需要使用Git Large File Storage这个工具,参见这个官方帖子,但是按照其给的步骤,博主未能成功上传超大文件,那么 ...

  7. poj3335

    半平面交&多边形内核.因为没注意了点的情况自闭了. https://blog.csdn.net/qq_40861916/article/details/83541403 这个说的贼好. 多边形 ...

  8. 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞

    漏洞描述 [漏洞预警]Tomcat CVE-2017-12615远程代码执行漏洞/CVE-2017-12616信息泄漏 https://www.secfree.com/article-395.html ...

  9. git push fatal: The remote end hung up unexpectedly

    git push fatal: The remote end hung up unexpectedly git config http.postBuffer git gc --aggressive 不 ...

  10. thinkphp 百度地图Api坐标计算 A坐标距离B坐标多少公里 并按照距离近的排序 坐标排序 外部字段排序

    感谢我磊哥 函数封装方法: //计算距离 /* **$a 可多数坐标 就是可数组类型的 ***$b 是登录者的坐标 ***ps: lat经度 lng纬度 经度在前纬度在后 *** ***/ funct ...