# Gradle构建入门
学习一个技术最好地方就是官方文档,本文旨在简化学习过程, 取其精华,去其糟粕,帮你在短时间内了解和使用Gradle。
# Gradle是什么
# 概述
Gradle是一种开源构建自动化工具,为解决项目自动化构建问题而生。
# 特性
- 高性能:Task相互独立,只运行需要的Task。可以使用构建缓存来重用以前的Task输出,甚至可以在不同的计算机之间
- 基于JVM:Gradle基于JVM运行,所以需要JDK环境,因而可以调用JAVA标准库中的API,在创建Task或者构建插件的时候。
- 实现常用约定,却又不受限于约定,实现Maven中的构建功能,但可以用Task重写这些功能。
- 可拓展性:可以拓展Task类型甚至构建模型。
- 提供构建扫描功能,可以通过扫描识别常见的构建性能问题,并可以分享扫描结果,以求助他人。
# 下载安装
下载并解压到你想要的位置,然后将bin目录添加到环境变量即可。
# 修改用户主目录
Gradle下载的jar包将会默认放到用户主目录中,默认路径为:$USER_HOME/.gradle
可以通过修改环境变量GRADLE_USER_HOME
来修改用户主目录位置
# 简单使用Gradle构建项目
此处以Java项目为例,Gradle提供了Java项目的初始化模版,如果您使用其他没有提供模板的语言, 就选择Basic然后自行创建对应文件夹,编写构建脚本。
# 初始化项目
- 新建一个你的项目目录并在命令行或终端中进入这个目录。
- 执行
gradle init
- 选择要初始化的项目类型,此处要创建Java项目,所以选择application。
- 选择实现语言,此处选择Java。
- 选择Gradle的构建DSL,Gradle支持Groovy DSL和Kotlin DSL,这里我们使用Groovy DSL。
- 选择测试框架,这里可以根据需要自行选择。
- 输入项目名称。
- 输入包名。
- 构建完成。
这样,一个Java项目的初始化就完成了,Gradle会自动生成常见的Java项目源码文件夹src目录,和Java项目的构建文件。
# 构建文件解释
因为初始化项目时的选择,Gradle构建脚本使用Groovy DSL语法,Groovy是一个脚本语言,方法调用可以通过空格省略小括号, 所以其实
plugins {
id 'java'
id 'application'
}
2
3
4
相当于
plugins ({
id 'java'
id 'application'
})
2
3
4
即是方法调用,依赖部分同理。
Java项目自动生成的构建文件build.gradle内容及解释如下:
plugins {
id 'java'
id 'application'
}
repositories {
jcenter()
}
dependencies {
implementation 'com.google.guava:guava:27.1-jre'
testImplementation 'junit:junit:4.12'
}
application {
mainClassName = 'gradle.test.App'
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- plugins的参数闭包是Gradle的构建插件,Gradle提供了很多构建插件,官方文档有使用说明,常用的有java,maven等, 这里就是java插件提供了java项目编译打包等功能。
- repositories的参数闭包是依赖仓库,Gradle将从对应仓库获取依赖jar包,可以使用maven仓库。
- dependencies是项目依赖的jar包,引用方式将在下面依赖详解中详细解释。
- application是项目执行时的参数,此处指定了主类。
# 依赖详解
添加jar包依赖的方式是在dependencies的参数闭包中添加jar包定位。
# 依赖格式
依赖格式为:依赖类型 jar包定位,如:
implementation 'com.google.guava:guava:27.1-jre'
implementation为依赖类型,后面字符串用冒号:分割成三部分,第一部分com.google.guava
是包名,
第二部分guava
是jar名,第三部分27.1-jre
是版本号。
也可以写的更清晰一点,如:
testCompile group: 'junit', name: 'junit', version: '4.12'
# 依赖类型
- compileOnly:仅在编译时依赖。
- implementation(取代compile):在编译和运行时都依赖。
- runtimeOnly(取代runtime):仅在运行时依赖,编译时不参与。
- testCompileOnly:在测试中,仅在编译时依赖。
- testImplementation:在测试中,在编译和运行时都依赖。
- testRuntimeOnly:在测试中,仅在运行时依赖,编译时不参与。
# Java项目基础构建命令
注意:构建生成的文件都在build文件夹,如果文件夹不存在,将会在第一次构建的时候生成。
此处只给出最简单常用的几个命令,具体可以参考官方Java插件文档。
# 编译class
./gardle class
将Java源文件编译成class文件,生成的文件在build文件夹中的class文件夹中。
# 生成jar包
./gradlew jar
生成的jar包在build文件夹中的libs文件夹中。
# 执行所有构建任务
./gradlew build
执行所有Task,插件的和自定义的。
# 清理生成的文件
./gradlew clean
清理由Gradle构建生成的文件。
# Gradle构建扫描
Gradle官方提供免费的构建扫描,用来扫描构建脚本的各方面信息,和性能测试。
在任何Task后面添加-scan即可生成测试报告,Gradle会自动生成一个网页来反映你的构建脚本的性能、依赖等信息。
命令示例:./gradlew build -scan