Gradle知识概括
Gradle简介
Gradle背景:
- 早期没有项目管理工具时,对于项目所依赖的第三方包采用的事:拷贝三方jar包到本地,然后加入到lib目录下,这样做劣势不言而喻,管理复杂容易冲突。
- Ant:2000年发布,纯java编写
- Maven:2004年发布,采用pom.xml管理项目
- Gradle:2012年,google背书的一款项目管理工具
Gradle简介:
- Gradle是一种开源自动化构建工具,支持多语言环境,受Ant、Maven思想的影响,集二者之大成,相比Ant的不规范,Maven的配置复杂、生命周期限制较多,Gradle既规范也更灵活,可以使用DSL(领域特定语言,如Groovy)编写构建,脚本更加精悍。本课程基于Gradle7讲解。
- 优势:
①灵活性:相对于 Maven、Ant 等构建工具,Gradle 提供了一系列的 API 让我们有能力去修改或定制项目的构建过程。
②粒度性:源码的编译,资源的编译,都是一个一个Task的,我们可以修改task来达到精细控制上。
③扩展性:Gradle 支持插件机制,所以我们可以复用这些插件,就如同复用库一样简单方便。
④兼容性:Gradle 不仅自身功能强大,而且它还能兼容所有的Maven、Ant功能,也就是说,Gradle 吸取了所有构建工具的长处。
⑤Spring源码采用Gradle进行管理 - 劣势:
①每一个版本都较上一次有非常大的改动,没有做较好向上兼容。
②学习成本高,groovy脚本语言 - Gradle组成:
Gradle安装配置:
- 地址:官网下载
- 下载后解压到本地:
①binary-only版本(-bin后缀):只有可执行文件
②complete版本(-all后缀):除了可执行文件还包含Gradle的源码和源码文档说明 - 下载后解压,配置环境变量:
①新建GRADLE_HOME环境变量,将gradle根目录配置
②在path中加入项%GRADLE_HOME%\bin,类似于JDK或Maven的配置
③打开CMD,执行gradle -v,成功输出版本则表示安装配置完成 - 注意:真实工作中由于各项目版本不一,并不会使用本地配置的gradle,而是采用wrapper的方式进行。
Gradle详解:
- Gradle中2大对象:Project和Task。
①一个构件脚本就是一个project,任何一个Gradle构建都是由一个或多个project组成,大家可以把一个project比作一个pom模块或一个jar,每一个project都是一个groovy脚本文件。
②task顾名思义就是任务,它是Gradle中最小的执行单元,类似于一个method或function函数,如编译、打包、生成javadoc等,一个project中会有多个tasks。
Gradle构建Web
创建Gradle项目:
- 手动创建:
①执行gradle init创建项目 - 快速搭建(https://start.spring.io/):
①Gradle版的SpringBoot
②Maven版的SpringBoot
项目结构解析:
├─build.gradle ①
├─gradlew ②
├─gradlew.bat ③
├─settings.gradle ④
├─gradle ⑤
│ └─wrapper
│ ├─ gradle-wrapper.jar
│ ├─ gradle-wrapper.properties
└─src ⑥
├─main
└─test
- 1.项目自动编译的时候要读取的配置文件。比如指定项目的依赖包等。build.grade有两个,一个是全局的,一个是在模块里面。全局的build.grade主要设置的是声明仓库源,gradle的版本号说明等。
- 2.linux下的gradle环境脚本,可以执行gradle指令,如:./gradlew build。
- 3.windows下的gradle环境,可以执行gradle指令。
- 4.包含必要的一些设置,例如,任务或项目之间的依懒关系等,无论有多少个子模块,该文件只会有一个,且一定在根项目中。
- 5.包含wrapper文件夹及其2个子文件,作用是:可以自动安装gradle环境。
- 6.程序源码。
build.gradle基础结构:
/******** 普通程序 gradle init初始化 ******/
plugins {
// Apply the java plugin to add support for Java
id 'java'
...
}
repositories {
// Use jcenter for resolving dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
implementation 'com.google