一、概述
1.什么是Gradle?
Gradle 是一种构建工具。
Java世界中主要有三大构建工具:Ant、Maven和Gradle。Ant几乎销声匿迹了,常见的就只有Maven和Gradle。
目前市面上Java开发,使用的构建工具基本都是Maven;安卓开发可能会使用到Gradle。
Maven的主要功能主要分为5点:
- 依赖管理系统
- 多模块构建
- 一致的项目结构
- 一致的构建模型
- 插件机制
Gradle 是继Maven之后的新一代构建工具,它采用基于groovy的DSL语言作为脚本,相比传统构建工具通过XML来配置而言,最直观上的感受就是脚本更加的简洁、优雅。
2.Gradle的优势
依赖管理:即将你项目中的jar包管理起来,你可以使用Maven或者Ivy的远程仓库、或者本地文件系统等(可以和Maven共用仓库)
编译打包:可以通过脚本实现花样打包,包括修改文件、添加抑或排除某些类或资源、采用指定JDK版本 构建、打包后自动上传
多项目支持:Gradle对多项目有着良好的支持,比如一个很具有代表性的实践就是 Spring Framework(Spring源码就是使用Gradle的!!!)
多语言支持:无论是 java、groovy、scala、c++都有良好的支持
跨平台支持:gradle是基于jvm的,只要有 jvm 你就可以让gradle运行
3.Maven与Gradle的区别
(1)灵活的的脚本:你可以使用groovy灵活的编写任务完成你想要做的任何事情
一方面是因为gradle使用的是groovy或者kotlin语言作为脚本的编写语言,这样极大的提高了脚本的灵活性, 但是其本质上的原因是 gradle的基础架构能够支持这种灵活性
(2)Gradle更快
Gradle 和 Maven 都支持并行的项目构建和依赖解析。
但是 gradle 有三个特点让其比Maven要更快!!!
a.增量构建
gradle为了提升构建的效率,提出了增量构建的概念,为了实现增量构建,gradle将每一个task都分成了三部 分,分别是input输入,任务本身和output输出。
增量构建的原理:监控input的变化,只有 input 发送变化了,才重新执行task任务,否则gradle认为可以重用之前的执行结果。
b.构建缓存
gradle可以重用同样 input 的输出作为缓存。
在同一个机子上这个与增量构建是同一个意思。但是缓存可以跨机器共享。
也就是说,如果你是在一个CI服务的话,build cache将会非常有用。因为 开发者的 build 可以直接从CI服务器上面拉取构建结果,非常的方便。
c.Gradle守护进程
gradle会开启一个守护进程来和各个build任务进行交互,优点就是不需要每次构建都初始化需要的组件和服务。 同时因为守护进程是一个一直运行的进程,除了可以避免每次JVM启动的开销之外,还可以缓存项目结构,文件,task和其他的信息,从而提升运行速度。
我们可以运行 gradle –status 来查看正在运行的 daemons进程。
使用 Maven 与 Gradle 构建项目时间开销对比
二、Gradle安装配置
1.安装
环境:Win11、JDK8
官网下载地址:Gradle | Releases
更多版本下载地址:Gradle Distributions
一般下载 binary-only 即可。
2.配置
下载后解压,配置环境变量
新建GRADLE_HOME环境变量,将Gradle根目录配置
在 path 中加入项:%GRADLE_HOME%\bin
打开CMD,执行 gradle -v
3.Gradle项目的Hello World
新建gradle项目
Gradle 项目的目录和 Maven 项目的目录几乎是一致的
build.gradle 文件中可以改一下镜像源,如下:
repositories {
mavenLocal()
maven {
url 'https://maven.aliyun.com/repository/public'
}
mavenCentral()
}
项目结构
- 项目自动编译的时候要读取的配置文件。比如指定项目的依赖包等。 build.grade有两个,一个是全局的,一个是在模块里面。全局的build.grade主要设置的是声明仓库源,gradle的版本号说明等。
- linux下的gradle环境脚本,可以执行gradle指令,如:./gradlew build
- windows下的gradle环境,可以执行gradle指令
- 包含必要的一些设置,例如,任务或项目之间的依懒关系等,无论有多少个子模块,该文件只会有一个,且一定在根项目中;
- 包含wrapper文件夹及其2个子文件,作用是:可以自动安装gradle环境
- 程序源码
三、Gradle的简单说明
1.Gradle的常用命令
帮助命令
gradle --help
查看版本
gradle -v
清空所有编译、打包生成的文件(即:清空build目录)
gradle clean
构建
gradle build
跳过测试构建构建
gradle build -x test
2.Gradle-Wrapper
当你新建的一个gradle项目时会发现,程序会下载一个wrapper相关的zip包
Gradle-Wrapper是简化 Gardle的安装和部署,出发点是让任意的gradle的项目都不需要单独安
装环境,项目会自动识别有无环境,如果在本地没有找到与 wrapper.properties版本相同的 Gar dle,IDEA就会帮你下载一个 gradle环境,官方的出发点是好的,下面我们来了解下这些配置的意
义。
3.项目依赖文件对比
Maven 项目的依赖配置文件是 pom.xml,而 Gradle 项目的依赖文件是 settings.gradle 和 build.gradle。
settings.gradle VS build.gradle
settings.gradle 文件是 gradle 项目的总体配置文件,一般会把子项目中通用的一些配置放在这个文件 中,有点类似于 maven 的 parent pom 文件,而 build.gradle 文件则是针对单个项目的具体配置,我 们主要使用的是 build.gradle 文件。build.gradle 配置内容如下:
从上述的配置文件可以看出,相比于 pom.xml 中的内容,build.gradle 还是要简洁很多的,它们 的对比如下图所示:
4.gradle中相关名词
1.group、name、version:group是module所在组;name是module的名字,同一个组里name具有唯 一性;version是module的版本号;group、name和version三者构成了该module的唯一性;
2.apply:在module中应用一个插件; 3.dependencies:用来声明module所依赖的jar包或其他module; 4.repositories:声明一个仓库,告诉程序到哪个仓库去找相应的module、jar包等依赖; 5.task:用来声明module的任务,其对应org.gradle.api.Task。
5.gradle项目
一个项目就代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle 实例化一个org.gradle.api.Project类,并且通过project变量使其隐式可见。 因此build.gradle中的写法都是Groovy的简写 其还可以换种写法如下:
group 'com.thoughtworks' project.version = '1.0-SNAPSHOT'
apply plugin: 'java' project.apply plugin: 'war'
点击任意字段进入源码中,可以看到group、version、apply、repositories等都是 org.gradle.api.Project类中定义的方法;
6.依赖管理
下面来看看gradle的依赖管理功能,这也算是我们使用构建工具的主要目的之一了。这点也是gradle相 较maven的优势之一了。相较于maven一大串的XML配置,gradle的依赖项仅需一行。