# 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然后自行创建对应文件夹,编写构建脚本。

# 初始化项目

  1. 新建一个你的项目目录并在命令行或终端中进入这个目录。
  2. 执行gradle init
  3. 选择要初始化的项目类型,此处要创建Java项目,所以选择application。
  4. 选择实现语言,此处选择Java。
  5. 选择Gradle的构建DSL,Gradle支持Groovy DSL和Kotlin DSL,这里我们使用Groovy DSL。
  6. 选择测试框架,这里可以根据需要自行选择。
  7. 输入项目名称。
  8. 输入包名。
  9. 构建完成。

这样,一个Java项目的初始化就完成了,Gradle会自动生成常见的Java项目源码文件夹src目录,和Java项目的构建文件。

# 构建文件解释

因为初始化项目时的选择,Gradle构建脚本使用Groovy DSL语法,Groovy是一个脚本语言,方法调用可以通过空格省略小括号, 所以其实

plugins {
    id 'java'
    id 'application'
}
1
2
3
4

相当于

plugins ({
    id 'java'
    id 'application'
})
1
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'
}
1
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