Gradle-1-什么是Gradle

作者: 悟笃笃 | 来源:发表于2019-07-01 20:17 被阅读9次

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

厚脸皮

Gradle系列笔记

什么Gradle

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

  • 可以用来构建Android项目,也可以用于构建Java Web项目等
  • Gradle脚本是使用groovy动态语言编写的,而groovy完全继承了Java语言,并且比Java语言更加灵活

①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代表文件)

  • gralde/d
    • wrapper/d
      • gradle-wrapper.jar/f
      • gradle-wrapper.properties/f
  • gradlew/f
  • gradlew.bat/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为单位对我们的项目进行构建工作的,我们只要了解其概念、如何工作、怎么写怎么改就可以满足开发的基本需求了。

相关文章

  • Gradle-1-什么是Gradle

    现在都9102年了,还写Gradle的笔记还真有点不好意思啊!本人最近在整理笔记,把之前学习的Gradle资料整理...

  • gradle通关系列(二)-编写Gradle构建

    编写Gradle构建 了解什么是Gradle,以及Gradle能够帮我们做什么之后,那该如何使用Gradle呢? ...

  • 什么是gradle?

    摘要: Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基...

  • 什么是Gradle?

    什么是Gradle Gradle是一个开源的自动构建工具。它的设计目的是足够灵活地构建几乎所有类型的软件。它的一些...

  • Gradle

    Gradle Gradle是什么 gradle是一个工具 --> 会写,会配置脚本 gradle是一个编程框架 -...

  • Gradle学习(2) —— 认识Gradle

    Gradle学习(2) —— 认识Gradle 一、Gradle 是什么? Gradle 是一个工具,也是一个...

  • AndroidStudio Gradle配置

    1、Gradle是什么?Gradle插件又是什么? Gradle是一个基于Apache Ant和Apache Ma...

  • Gradle安装

    上一节Gradle简介简单讲了Gradle是什么以及干什么的,这一节搞一下Gradle怎么安装!!!Gradle是...

  • android开发 之 Gradle以及编译优化

    本文Demo的完整工程代码, 参考这里的StudyPackage 目录 什么是Gradle 为什么是Gradle ...

  • java运维之gradle

    一、Gradle简介 1.1 Gradle是什么 Gradle是一个基于Apache Ant和Apache Mav...

网友评论

    本文标题:Gradle-1-什么是Gradle

    本文链接:https://www.haomeiwen.com/subject/elcncctx.html