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的运行参数。配置通过几种方式实现:
- gradle命令行参数
- 系统环境变量
- 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
发表回复