一: Gradle综述

Gradle和maven一样,是个代码编译系统。Gradle的核心特点:

  • 主要用于Java项目编译
  • 有一套自己的规范,规定了文件的目录结构和文件组成
  • 使用Repository中心仓库管理依赖包

无论Gradle怎么辩解,这货是不是怎么看怎么和maven类似呢,为啥用Gradle不用maven了呢?因为,blablabla,一堆虚伪的话,其实,你想用哪个,完全出于习惯,这玩意儿就跟时尚一样,哪件衣服比哪件有品味点呢,不都是躁吗?

理论上可以用Gradle编译一切语言,但是其他语言的用户不那么认为,问过make的意见了吗?cmake呢?Go呢?

Gradle使用流程

下载安装

安装Gradle之前要预先安装Java, 安装后查看版本号:

gradle -v

创建Gradle项目

Gradle规定了java程序的目录结构和文件组成。通过交互式对话窗口,按需要输入。

在一个空文件下,创建项目:

cd gradletest
gradle init

创建好的目录结构如下:

gradletest
├── app
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── mypackage
│       │   │       └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── mypackage
│           │       └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

编译项目

在生成的项目中,有一个gradlew文件,gradle wrapper。运行它:

./gradlew build --info

工作结束!在app下生成了一个build目录,里面摆放着编译的结果

查看帮助

./gradlew help
./gradlew tasks

Gradle核心概念

Gradle一共有几个核心概念,可以理解为Gradle的几大模块,组合在一起完成了Gradle的编译工作

1. project,项目

project就是指通过gradle init生成的目录文档,这个是我们最常打交道的部分。项目里面包含着程序猿们的血汗代码,gradle编译脚本,gradlewrapper,以及包含子项目

2. configuration,配置

配置是指gradle的属性配置。这个千万要和project目录下的script脚本区分开。这里一般用于配置Gradle的运行参数。配置通过几种方式实现:

  1. gradle命令行参数
  2. 系统环境变量
  3. gradle.properties文件

gradle.properties文件可以放在~/.gradle目录下,也可以放在project目录下,作用域不同而已

3. gradle wrapper

gradle wrapper是gradle的沙盒脚本。即project目录下gralew文件,或者gradlew.bat文件。gradle wrapper顾名思义,就是把gradle命令本身封装了一下,它其实是个沙盒脚本,避免项目之间不同版本的Gradle相互污染。

如果你知道python的virtualenv的话,你很好理解gradle wrapper,二者目的是类似的。假设你有个项目,用的是Gradle v6,另一个版本,用的是Gradle V7。在编译项目之前,是不是得自己下载版本,还要担心不同版本会不会相互冲突的问题呢?Gradle wrapper脚本就是解决这个问题的,你只需要配置好需要的Gradle版本,调用wrapper脚本,它就会自动替你搞一个gradle沙盒,避免相互污染。

可通过一下指令生成wrapper:

$ gradle wrapper

4. Gradle Daemon

Gradle Daemon是Gradle项目中真正执行编译动作的程序。Gradle本身是个java程序,每次启动时都要启动JVM。Gradle为了提高效率,就在第一次启动Gradle的时候,启动了个后台程序,就是Gradle Daemon。Daemon一直运行着,省去了每次编译时JVM的启动,而且因为常驻内存,处理速度更快

5. Build cache

编译过程中的Cache。这不是新鲜概念,通过cache,省去一些重复操作,提高编译效率

整体工作流程

Gradle整体工作流程就是以上几个模块组合在一起:

—>通过Gradle wrapper启动Gradle Daemon,configuration配置的参数是Daemon的启动参数

——–>开始编译project,编译过程中,可根据情况使用gradle build cache,提高编译速度。

—————–>编译结束后,Daemon不退出,继续运行,等待编译下一个project

Ref



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825