Gradle初步

1、介绍

Gradle是一个基于 JVM 的富有突破性构建工具。java

它为您提供了:web

  • 一个像 ant 同样,通用的灵活的构建工具
  • 一种可切换的,像 maven 同样的基于约定优于配置的构建框架
  • 强大的多工程构建支持
  • 强大的依赖管理(基于 ApacheIvy)
  • 对已有的 maven 和 ivy 仓库的全面支持
  • 支持传递性依赖管理,而不须要远程仓库或者 pom.xml 或者 ivy 配置文件
  • ant 式的任务和构建是 gradle 的第一公民
  • 基于 groovy,其 build 脚本使用 groovy dsl 编写
  • 具备普遍的领域模型支持你的构建

 

2、概述

 

特性列表:

(1)基于声明的构建和基于约定的构建

Gradle 的核心在于基于 Groovy 的丰富而可扩展的域描述语言(DSL)。 Groovy 经过声明性的语言元素将基于声明的构建推向下层,你能够按你想要的方式进行组合。 这些元素一样也为支持 Java, Groovy,OSGi,Web 和 Scala 项目提供了基于约定的构建。 而且,这种声明性的语言是能够扩展的。你能够添加新的或加强现有的语言元素。 所以,它提供了简明、可维护和易理解的构建。编程

(2)为以依赖为基础的编程方式提供语言支持

声明性语言优势在于通用任务图,你能够将其充分利用在构建中. 它提供了最大限度的灵活性,以让 Gradle 适应你的特殊需求。设计模式

(3)构建结构化

Gradle 的灵活和丰富性最终可以支持在你的构建中应用通用的设计模式。 例如,它能够很容易地将你的构建拆分为多个可重用的模块,最后再进行组装,但不要强制地进行模块的拆分。 不要把本来在一块儿的东西强行分开(好比在你的项目结构里),从而避免让你的构建变成一场噩梦。 最后,你能够建立一个结构良好,易于维护,易于理解的构建。闭包

(4)深度 API

Gradle 容许你在构建执行的整个生命周期,对它的核心配置及执行行为进行监视并自定义。app

(5)Gradle 的扩展

Gradle 有很是良好的扩展性。 从简单的单项目构建,到庞大的多项目构建,它都能显著地提高你的效率。 这才是真正的结构化构建。经过最早进的增量构建功能,它能够解决许多大型企业所面临的性能瓶颈问题。框架

(6)多项目构建

Gradle 对多项目构建的支持很是出色。项目依赖是首先须要考虑的问题。 咱们容许你在多项目构建当中对项目依赖关系进行建模,由于它们才是你真正的问题域。 Gradle 遵照你的布局。maven

Gradle 提供了局部构建的功能。 若是你在构建一个单独的子项目,Gradle 也会帮你构建它所依赖的全部子项目。 你也能够选择从新构建依赖于特定子项目的子项目。 这种增量构建将使得在大型构建任务中省下大量时间。编程语言

(7)多种方式管理依赖

不一样的团队喜欢用不一样的方式来管理他们的外部依赖。 从 Maven 和 Ivy 的远程仓库的传递依赖管理,到本地文件系统的 jar 包或目录,Gradle 对全部的管理策略都提供了方便的支持。工具

(8)Gradle 是第一个构建集成工具

Ant tasks 是最重要的。而更有趣的是,Ant projects 也是最重要的。 Gradle 对任意的 Ant 项目提供了深度导入,并在运行时将 Ant 目标(target)转换为原生的 Gradle 任务(task)。 你能够从 Gradle 上依赖它们(Ant targets),加强它们,甚至在你的 build.xml 上定义对 Gradle tasks 的依赖。Gradle 为属性、路径等等提供了一样的整合。

Gradle 彻底支持用于发布或检索依赖的 Maven 或 Ivy 仓库。 Gradle 一样提供了一个转换器,用于将一个 Maven pom.xml 文件转换为一个 Gradle 脚本。Maven 项目的运行时导入的功能将很快会有。

 

(9)易移植

Gradle 能适应你已有的任何结构。所以,你总能够在你构建项目的同一个分支当中开发你的 Gradle 构建脚本,而且它们可以并行进行。 咱们一般建议编写测试,以保证生成的文件是同样的。 这种移植方式会尽量的可靠和减小破坏性。这也是重构的最佳作法。

 

Groovy

Gradle 的构建脚本是采用 Groovy 写的,而不是用 XML。 但与其余方法不一样,它并不仅是展现了由一种动态语言编写的原始脚本的强大。 那样将致使维护构建变得很困难。 Gradle 的总体设计是面向被做为一门语言,而不是一个僵化的框架。 而且 Groovy 是咱们容许你经过抽象的 Gradle 描述你我的的 story 的黏合剂。 Gradle 提供了一些标准通用的 story。这是咱们相比其余声明性构建系统的主要特色。 咱们的 Groovy 支持也不是简单的糖衣层,整个 Gradle 的 API 都是彻底 groovy 化的。只有经过 Groovy才能去运用它并对它提升效率。

The Gradle wrapper

Gradle Wrapper 容许你在没有安装 Gradle 的机器上执行 Gradle 构建。 这一点是很是有用的。好比,对一些持续集成服务来讲。 它对一个开源项目保持低门槛构建也是很是有用的。 Wrapper 对企业来讲也颇有用,它使得对客户端计算机零配置。 它强制使用指定的版本,以减小兼容支持问题。

自由和开源

Gradle 是一个开源项目,并遵循 ASL 许可。

 

3、为何使用 Groovy?

咱们认为内部 DSL(基于一种动态语言)相比 XML 在构建脚本方面优点很是大。它们是一对动态语言。 为何使用 Groovy?答案在于 Gradle 内部的运行环境。 虽然 Gradle 核心目的是做为通用构建工具,但它仍是主要面向 Java 项目。 这些项目的团队成员显然熟悉 Java。咱们认为一个构建工具应该尽量地对全部团队成员透明。

你可能会想说,为何不能使用 Java 来做为构建脚本的语言。 我认为这是一个颇有意义的问题。对大家的团队来说,它确实会有最高的透明度和最低的学习曲线。 但因为 Java 自己的局限性,这种构建语言可能就不会那样友善、 富有表现力和强大。 [1] 这也是为何像 Python,Groovy 或者 Ruby 这样的语言在这方面表现得更好的缘由。 咱们选择了 Groovy,由于它向 Java 人员提供了目前为止最大的透明度。 其基本的语法,类型,包结构和其余方面都与 Java 同样,Groovy 在这之上又增长了许多东西。可是和 Java 也有着共同点。

对于那些分享和乐于去学习 Python 知识的 Java 团队而言,上述论点并不适用。 Gradle 的设计很是适合在 JRuby 或 Jython 中建立另外一个构建脚本引擎。 那时候,对咱们而言,它只是再也不是最高优先级的了。咱们很高兴去支持任何社区努力建立其余的构建脚本引擎。

 

 

 

4、安装Gradle

官网地址为:https://gradle.org/

 

 成功下载后解压到某个目录下,能够是C盘也能够是D盘,而后配置对应的环境变量便可,通常是精确到bin目录

例如:

 

检验是否配置好的标准是,打开cmd,输入 gradle -v,出现以下图就表示OK

 

5、Gradle构建基础

Projects 和 tasks

projects 和 tasks是 Gradle 中最重要的两个概念。

任何一个 Gradle 构建都是由一个或多个 projects 组成。每一个 project 包括许多可构建组成部分。 这彻底取决于你要构建些什么。举个例子,每一个 project 或许是一个 jar 包或者一个 web 应用,它也能够是一个由许多其余项目中产生的 jar 构成的 zip 压缩包。一个 project 没必要描述它只能进行构建操做。它也能够部署你的应用或搭建你的环境。不要担忧它像听上去的那样庞大。 Gradle 的 build-by-convention 可让您来具体定义一个 project 到底该作什么。

每一个 project 都由多个 tasks 组成。每一个 task 都表明了构建执行过程当中的一个原子性操做。如编译,打包,生成 javadoc,发布到某个仓库等操做。

简单示例(Hello World):

 

budle.gradle

task hello {
    doLast {
        println 'Hello world!'
    }
}

而后在该文件所在目录执行 gradle -q hello

 

注意:

-q 参数的做用是什么?

该文档的示例中不少地方在调用 gradle 命令时都加了 -q 参数。该参数用来控制 gradle 的日志级别,能够保证只输出咱们须要的内容。

 

上面的脚本定义了一个叫作 hello 的 task,而且给它添加了一个动做。当执行 gradle hello 的时候, Gralde 便会去调用 hello 这个任务来执行给定操做。这些操做其实就是一个用 groovy 书写的闭包。

若是你以为它看上去跟 Ant 中的 targets 很像,那么是对的。Gradle 的 tasks 就至关于 Ant 中的 targets。不过你会发现他功能更增强大。咱们只是换了一个比 target 更形象的另一个术语。不幸的是这恰巧与 Ant 中的术语有些冲突。ant 命令中有诸如 javac、copy、tasks。因此当该文档中说起 tasks 时,除非特别指明 ant task。不然指的均是指 Gradle 中的 tasks。

 

 

 

6、依赖管理基础

什么是依赖管理?

通俗来说,依赖管理由以下两部分组成。首先,Gradle 须要知道项目构建或运行所须要的一些文件,以便于找到这些须要的文件。咱们称这些输入的文件为项目的依赖。其次,你可能须要构建完成后自动上传到某个地方。咱们称这些输出为发布。下面来仔细介绍一下这两部分:

大部分工程都不太可能彻底自给自足,通常你都会用到其余工程的文件。好比我工程须要 Hibernate 就得把它的类库加进来,好比测试的时候可能须要某些额外 jar 包,例如 JDBC 驱动或 Ehcache 之类的 Jar 包。

这些文件就是工程的依赖。Gradle 须要你告诉它工程的依赖是什么,它们在哪,而后帮你加入构建中。依赖可能须要去远程库下载,好比 Maven 或者 Ivy 库。也能够是本地库,甚至多是另外一个工程。咱们称这个过程叫依赖解决

一般,依赖的自身也有依赖。例如,Hibernate 核心类库就依赖于一些其余的类库。因此,当 Gradle 构建你的工程时,会去找到这些依赖。咱们称之为依赖传递

大部分工程构建的主要目的是脱离工程使用。例如,生成 jar 包,包括源代码、文档等,而后发布出去。

这些输出的文件构成了项目的发布内容。Gralde 也会为你分担这些工做。你声明了发布到到哪,Gradle 就会发布到哪。“发布”的意思就是你想作什么。好比,复制到某个目录,上传到 Maven 或 Ivy 仓库。或者在其它项目里使用,这些均可以称之为发行

 

 

 

小结:

我为何学习Gradle,由于好奇。好奇是学习的驱动力。固然了,不只仅是好奇,还有就是不久须要它。为了未雨绸缪,提早接触学习。

本文主要参考w3cschool,同时也加上一些本身的理解。主要围绕介绍、特性、为何使用groovy、安装、构建基础、依赖管理基础等六个方面。

其中或许有人会疑惑为何提到groovy,由于gradle就是用groovy写的。对于groovy,或许有人会问,有必要掌握吗?我的以为暂时没这个必要。若是你以为gradle某些功能不难知足你的需求,你能够尝试学习groovy,利用groovy对于gradle从新改装,或者是不用groovy,直接用其余的编程语言编写比gradle更强大的工具。固然了,本文重要不是说教你怎么写一个gradle,而是关于gradle相关的理论知识及其附加的示例,但愿能给你们有所帮助。

 

 

本文主要参考:

w3cschool关于Gradle:https://www.w3cschool.cn/gradle/

相关文章
相关标签/搜索