1. 简介
1.1 认识Gradle
Gradle 是一款开源的自动化构建工具,使用灵活且性能极佳,可以使用 Groovy 或者 Kotlin DSL 来编写构建脚本。从移动开发到微服务,从小团队到大企业,Gradle提高了开发人员的生产力。
Gradle 具有如下特性:
- 可以高度定制:Gradle使用可定制、可扩展的方式进行建模,非常灵活。
- 构建速度快:Gradle通过重用先前执行的输出,仅处理已更改的输入且通过并行执行任务来快速完成构建。
- 功能强大:Gradle是Android的官方构建工具,并支持许多流行的语言和技术。
1.2 安装Gradle
1、首先需要下载 Gradle 的安装包,建议下载带源码的完整版本(否则 Gradle 中属性点进去不会有注释)下载地址:gradle.org/releases/。
2、添加 Gradle 环境变量。
3、CMD 命令窗口输入gradle -v
,看看是否显示当前 Gradle 版本1.3 快速上手
1、在工程文件夹下,创建一个 build.gradle 文件,内容如下:
2、打开 cmd 终端,移动到工程目录下,执行命令:task hello{
println 'Hello, Gradle!'
}
gradle -q hello
,查看结果,执行成功并生成 .gradle 文件夹。
3、继续在这个命令窗口执行命令:gradle wrapper
,构建成功。
如图所示,这就是一个很标准的 gradle 工程目录结构:
gradlew 和 gradlew.bat 分别是 Linux 和 Windows 下的可执行脚本,具体业务逻辑是在 /gradle/wrapper/gradle-wrapper.jar 中实现,gradlew 最终还是使用 Java 执行这个 jar 包来执行相关的 Gradle 操作的。
1.4 配置文件gradle-wrapper.properties
内容如下:
distributionBase=GRADLE_USER_HOME # 下载的Gradle压缩包解压后存储的主目录
distributionPath=wrapper/dists # 相对于distributionBase的解压后的Gradle压缩包的路径
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip # Gradle发行版压缩包的下载地址
zipStoreBase=GRADLE_USER_HOME #同distributionBase,只不过存放的是zip压缩包的
zipStorePath=wrapper/dists
GRADLE_USER_HOME:
- 默认路径在~/.gradle/ ,不建议使用本地 maven 的 m2 替代,因为原本的 .gradle 目录下的模块分的很清晰,功能明确。
- 如果启动时,指定参数,使用别的目录代替 GradleUserHome ,后果是每次构建需要重新下载插件与依赖到新的目录。
- 默认情况下,gradle 运行时,除了和项目打交道,还有当前项目构建的全新的 GradleUserHome 目录,所有jar包都得重新下载
1.5 Gradle命令
gradlew -?/-h/-help
:使用帮助。gradlew tasks
:查看所有可执行Tasks。gradlew --refresh-dependencies assemble
:强制刷新依赖。gradlew cBC
:等价与执行 Task cleanBuildCache,这种通过缩写名快速执行任务。gradlew :app:dependencies
:查找 app 工程依赖树。1.6 IDEA配置Gradle
1、在 gradle 目录中新建 .gradle 文件夹,在该文件夹中创建 init.gradle 文件。
2、IDEA 中指定 gradle 工作目录。allprojects { repositories { def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL." remove repo } } } maven { url ALIYUN_REPOSITORY_URL } } }
3、通过 Gradle 创建 SpringBoot 项目。
这里我们看到:工程目录比刚刚多了个 setting.gradle 文件,现在来单独说明下这个文件具体有啥作用:
- Gradle 支持多工程构建,使用 settings.gradle 来配置添加子工程(模块)
- settings 文件在初始化阶段执行,创建 Settings 对象,在执行脚本时调用该对象的方法
Settings.include(String… projectPaths)
Initialization
- Gradle 支持单项目和多项目构建。在初始化阶段,Gradle 确定哪些项目将参与构建,并为每个项目创建 Project 实例,一般我们不会接触到它。(比如解析settings.gradle)
- Configuration
- 配置阶段,解析每个工程的 build.gradle 文件,创建要执行的任务子集和确定各种任务之间的关系,并对任务的做一些初始化配置。
- Execution
- 解析每个 Project 中的 build.gradle,解析过程中并不会执行各个 build.gradle 中的 task。
- 经过 Configration 阶段,Project 之间及内部 Task 之间的关系就确定了。一个 Project 包含很多 Task,每个 Task 之间有依赖关系。Configuration 会建立一个有向图来描述 Task 之间的依赖关系,所有 Project 配置完成后,会有一个回调 project.afterEvaluate(),表示所有的模块都已经配置完了。
因为这里配置阶段和 Gradle 对应的 Task(任务列表)相互绑定,所以这里不好拿代码单独解释配置相关的方法,需要结合 Gradle 任务一起讲,所以这里先忍耐一下,等讲完Task(任务列表)后,再一起解析。
2.4 熟悉Gradle任务
- task 是 gardle 中最小的任务单元,任务之间可以进行复杂的操作(如动态创建任务,多任务间依赖调用等等)。gradle 的执行其实就是由各种任务组合执行,来对项目进行构建的
- 使用
gradlew help
命令,任何 gradle 项目都有一个该 task,可以执行此命令观察 task 执行的流程是否如预期。 - 可以使用工具查看,还可以通过 gradlew tasks 命令查看可运行任务。
- 使用
gradlew tasks --all
命令查看所有任务。 - 使用
gradlew A B
命令表示执行任务 A 和 B,支持驼峰简写。
- 使用