开发工具工作生活

Gradle-1-什么是Gradle

2019-07-01  本文已影响9人  悟笃笃

现在都9102年了,还写Gradle的笔记还真有点不好意思啊!
本人最近在整理笔记,把之前学习的Gradle资料整理分享一下,希望能帮到有需要的朋友。

厚脸皮

Gradle系列笔记

什么Gradle

Gradle是一个流行的项目构建工具,它使用基于JVM运行的groovy语言定义了一套专门用于项目构建的DSL。以下是其特性和作用的简单介绍

①DSL:特定领域语言,其特性语法是为了专门解决某一领域而定义的语言。其通用性不强,或者说没有。例如Java,可以开发Java web、Android、PC程序等。而Gradle定义的DSL只针对于项目构建领域,暂无其他通用性。Groovy并不是DSL,只是被Gradle作为其DSL的专用语言而已。

Gradle入门

在了解Gradle是如何构建项目之前,先看看Gradle是如何进行工作的

安装
本文采用Windows作为实操环境,首先在下载Gradle工具包。截止本文章编写日期,最新的Gradle版本是5.4.x,在这里使用4.10.3下载传送门
在Windows的环境变量path值上添加gradle的执行目录,例如本机的E:\Gradle\gradle-4.10.3\bin。之后在cmd上运行gradle -v,如果成功打印gradle版本号既是安装成功。记住必须先安装JDK,最好是1.8版本

搞定之后,建立一个英文目录,在该目录下添加一个build.gradle文件,编辑代码

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

在命令行中进入到该目录,运行gradle -q hello,可以看到命令行窗口打印出

D:\GradleLab\book_code>gradle -q hello
Hello World!

另外,在该目录下还生成了一个.gradle文件夹,该文件夹是项目的编译缓存。
接着对以上代码进行解析,task代表定义一个任务,任务名称为hello。任务中doLast{}是一个Action,按照Java中的理解Action代表一个回到。它运行在Task运行开始或者结束之时。
而运行脚本代码的指令gradle -q hellogradle是使用gradle sdk,-q是打印日志,-q中的q代表日志级别,hellobuild.gradle中定义的任务名称。
gradle.build文件是Gradle默认的构建脚本文件,如果在将名称修改就无法识别了。例如将其改为build1.gradle再运行gradle -q hello,会提示Task 'hello' not found in root project 'book_code'. Some candidates are: 'help'.

Gradle Wrapper

Gradle Wrapper是对Gradle的一层包装,用于解决开发过程中不同开发者使用不同gradle版本的问题,在一个项目下生成wrapper目录文件之后,这些文件会要求编译构建该项目必须使用的Gradle版本。
Gradle提供了内置的Taskwrapper用于生成当前Gradle版本的wrapper目录文件。
使用该命令之后,会在当前目录下生成以下文件(文件名+/+d&f,d代表文件夹,f代表文件)

gradlew和gradlew.bat分别是Linux和windows系统下的可执行脚本,其用法和Gradle原生命令一样。而gradle-wrapper.jar是具体业务逻辑实现的jar包,上述的可执行脚本就是使用该jar包实现wrap。gradle-wrapper.properties是配置文件,用于配置使用哪个版本的gradle及其下载地址。

wrapper配置

运行gradle wrapper任务时有默认配置,当然我们也可以通过两种方式自定义wrapper选项。
指定wrapper任务参数,指定以下参数可以控制wrapper文件的生成

参数名 说明
--gradle-version 用于指定使用的Gradle版本
--gradle-distribution-rul 用于指定下载Gradle发行版的url地址

例如使用gradle wrapper --gradle-version 4.10.3会指定wrapper使用4.10.3版本的Gradle。

重写任务自定义gradle-wrapper.propeties,在build.gradle脚本中通过重写任务wrapper指定gradle-wrapper.gradle的配置参数以达到目的。其可配置参数如下表

字段名 说明
distributionBase 下载的Gradle压缩包解压后存储的主目录
distributionPath 相对于distributionBase解压后的Gradle压缩包的路径
zipStoreBase 同distributionBase,只不过是存放zip压缩包的
zipStorePath 同distributionPath,只不过是存放zip压缩包的
distributionURL Gradle发行版压缩包的下载地址

自定义wrapper task,将wrapper task定义在build.gradle脚本中,运行gradlew任务时会根据任务配置生成wrapper文件目录。

task wrapper( type : Wrapper ) {
    gradleVersion = "4.10.3"
}

Gradle日志

执行任务时,可以通过指定输出日志级别来决定显示何种级别的日志。各级别如下

级别 用于
ERROR 错误信息
QUIET 重要信息
WARNING 警告信息
LIFECYCLE 进度信息
INFO 普通信息
DEBUG 调试信息

上表从上到下表示消息级别由重要到普通,例如gradle -w hello将会显示warning以上级别的信息,包括warning,quiet和error。

输出错误堆栈

我们都知道JVM虚拟是基于堆栈的,当上述日志无法找出错误的时候,就需要输出堆栈信息去查看所有可用信息,命令如下

命令行选项 用途
-s或--stacktrace 输出关键性的堆栈信息
-S或--full-stacktrace 输出全部堆栈信息

正常来说使用-s即可,-S信息太多了。

小结

学习Gradle不要被Gradle繁杂的语法规则吓倒了,直接拿着一个Android或者Java项目的Gradle配置去学习Gradle效率其实很低,还不如从Gradle的基础概念、特性学起。
说白了,Gradle构建过程中起作用就是我们编写的那些脚本文件,它们以Task为单位进行工作。我们使用第三方提供的构建插件库也是以Task为单位对我们的项目进行构建工作的,我们只要了解其概念、如何工作、怎么写怎么改就可以满足开发的基本需求了。

上一篇 下一篇

猜你喜欢

热点阅读