文章目录
前言
Gradle是一个项目构建工具,它最早出现于2012年,由Google大力推广,受到了开发者的欢迎。在此之前,项目构建主要依赖Ant和Maven等工具。、
Ant是最早的构建工具之一,2000年已经发布,它完全用Java编写,可以执行基于XML的构建文件。然而,它的缺点是构建过程不规范,且处理jar包依赖问题比较麻烦。
Maven是另一个广受欢迎的构建工具,发布于2004年。它采用pom.xml文件来管理项目,能够自动化下载并管理项目所需的jar包依赖。然而,Maven也有其局限性,例如配置复杂,且生命周期限制较多。
Gradle的出现,可以说是对Ant和Maven的集大成者。它既规范又灵活,支持多语言环境,且使用领域特定语言(如Groovy)编写构建脚本。Gradle的出现,改善了之前构建工具的一些问题,受到了开发者的欢迎。
一、✨Gradle安装和配置
1. 安装Gradle
-
进入官网
-
点击Install Gradle
此处选择自己想要的版本进行下载,下载完整版并解压下载的Gradle
2. 配置Gradle
-
配置环境变量,此处有三个地方需要配置
提示:GRADLE_USER_HOME配置的本地仓库和Gradle wrapper缓存目录,是可以和Maven共用同一个地址
-
配置完成后,在cmd中输入gradle -v,出现以下界面便配置成功了
二、🎊Gradle创建一个项目
Gradle项目目录结构
提示:只有war工程才有webapp目录,对于普通的jar工程则没有;gradlew和gradlew。bat执行的指定wrapper版本中的gradle指令,不是本地安装的gradle的指令
创建方式一
本次使用Spring官方脚手架创建,IDEA中同理
与之前描述的目录结构一致
创建方式二
使用命令行创建Gradle项目
先创建一个名为gradle02的目录,然后进入该目录输入以下命令
gradle init
三、🎎Gradle常见指令
常用gradle指令 | 作用 |
---|---|
gradle clean | 清空build目录 |
gradle classes | 编译业务代码和配置文件 |
gradle test | 编译测试代码,生成测试报告 |
gradle build | 构建项目 |
gradle builde -x test | 跳过测试构建 |
需要注意的是:gradle的指令要在含有 build.gradle的目录执行,且初次执行编译和构建的命令时会下载依赖,这个过程很慢
四、🛒修改Maven下载源
Gradle 自带的 Mavn 源地址是国外的,该 Maven 源国内的访问达度是很慢的,除非使用了特别的手段。建议使用国内的第三方开放的 Maven 源或企业内部白建 Maven 源。
打开gradle解压目录下的init.d文件夹,阅读其中的readme.txt文件可知,在该目录下创建以.gradle结尾的初始化脚本文件,这些文件会在build之前就执行
原文:You can add .gradle (e.g. test.gradle) init scripts to this directory. Each one is executed at the start of the build.
所以,我们在init.d文件夹下创建init.gradle文件,并加入以下配置
allprojects {
repositories {
mavenLocal()
maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" }
mavenCentral()
}
buildscript {
repositories {
maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
maven { name "Bstek" ; url 'https://nexus.bsdn.org/content/groups/public/' }
maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
}
}
}
allprojects:针对所有的工程目录,项目所需要的jar包会从repositories下载
buildscript:是build.gradle构建脚本使用的,如果构建脚本本身需要一些依赖,它就会去repositories中的仓库去下载
使用mavenLocal(),它会默认去Maven本地仓库寻找,前提是配置了M2_HOME环境变量
拓展
init.gradle文件说明
-
在命令行指定文件,例如:gradle --init-script yourdir/init.gradle -q taskName。你可以多次输入此命令来指定多个init文件
-
把init.gradle文件放到 USER_HOME/.gradle/ 目录下
-
把以.gradle结尾的文件放到 USER_HOME/.gradle/init.d/ 目录下
-
把以.gradle结尾的文件放到 GRADLE_HOME/init.d/ 目录下
如果存在上面的4种方式的2种以上,gradle会按上面的1-4序号依次执行这些文件,如果给定目录下存在多个init脚本,会按拼音a-z顺序执行这些脚本,每个init脚本都存在一个对应的gradle实例,你在这个文件中调用的所有方法和属性,都会委托给这个gradle实例,每个init脚本都实现了Script接口。
仓库地址说明
-
mavenLocal(): 指定使用maven本地仓库,而本地仓库在配置maven时settings文件指定的仓库位置。如E:/repository;
gradle 查找jar包顺序如下:
从第一个配置文件中寻找本地仓库,如果没有就去第二个配置文件中寻找本地仓库的地址,如果第二个还是没有,就会去.m2下面的文件夹中寻找jar包
-
maven { url 地址}:指定maven仓库,一般用私有仓库地址或其它的第三方库【比如阿里镜像仓库地址】。
-
mavenCentral():这是Maven的中央仓库,无需配置,直接声明就可以使用。
-
jcenter():JCenter中央仓库,实际也是是用的maven搭建的,但相比Maven仓库更友好,通过CDN分发,并且支持https访问,在新版本中已经废弃了,替换为mavenCentral()。
总之, gradle可以通过指定仓库地址为本地maven仓库地址和远程仓库地址相结合的方式,避免每次都会去远程仓库下载依赖库。这种方式也有一定的问题,如果本地maven仓库有这个依赖,就会从直接加载本地依赖,如果本地仓库没有该依赖,那么还是会从远程下载。但是下载的jar不是存储在本地maven仓库中,而是放在自己的缓存目录中,默认在USER_HOME/.gradle/caches目录,当然如果我们配置过GRADLE_USER_HOME环境变量,则会放在GRADLE_USER_HOME/caches目录,那么可不可以将gradle caches指向maven repository。我们说这是不行的,caches下载文件不是按照maven仓库中存放的方式。
阿里云仓库地址说明
仓库地址
gradle 配置指南
在 build.gradle 文件中加入以下代码:
allprojects {
repositories {
maven {
url 'https://maven.aliyun.com/repository/public/'
}
mavenLocal()
mavenCentral()
}
}
如果想使用其它代理仓,以使用 central 仓为例,代码如下:
allprojects {
repositories {
maven {
url 'https://maven.aliyun.com/repository/public/'
}
maven {
url 'https://maven.aliyun.com/repository/central'
}
mavenLocal()
mavenCentral()
}
}
加入你要引用的文件信息:
dependencies {
compile '[GROUP_ID]:[ARTIFACT_ID]:[VERSION]'
}
执行命令:
gradle dependencies 或 ./gradlew dependencies 安装依赖
五、👓Wrapper包装器
Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本的 Gradle
例如:把自己的代码共享给其他人使用,可能出现如下情况:
- 对方电脑没有安装 gradle
- 对方电脑安装过 gradle,但是版本太旧了
这时候,我们就可以考虑使用 Gradle Wrapper 了。这也是官方建议使用 Gradle Wrapper 的原因。实际上有了 Gradle Wrapper 之后,我们本地是可以不配置 Gradle 的,下载Gradle 项目后,使用 gradle 项目自带的wrapper 操作也是可以的。
那如何使用Gradle Wrapper 呢?
项目中的gradlew、gradlew.cmd脚本用的就是wrapper中规定的gradle版本。参见源码
而我们上面提到的gradle指令用的是本地gradle,所以gradle指令和gradlew指令所使用的gradle版本有可能是不一样的。
gradlew、gradlew.cmd的使用方式与gradle使用方式完全一致,只不过把gradle指令换成了gradlew指令。
参数名 | 说明 |
---|---|
–gradle-version | 用于指定使用的Gradle版本 |
–gradle-distribution-url | 用于指定下载Gradle发行版的url地址 |
GradleWrapper的执行流程
-
当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息
-
准确的将指定版本的 gradle 下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)
-
并构建本地缓存(GRADLE_USER_HOME目录下的caches目录中),下载再使用相同版本的gradle就不用下载了4.之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本。
gradle-wrapper.properties 文件解读:
字段名 说明 distributionBase 下载的Gradle压缩包解压后存储的主目录 distributionPath 相对于distributionBase的解压后的Gradle压缩包的路径 zipStoreBase 同distributionBase,只不过是存放zip压缩包的 zipStorePath 同distributionPath,只不过是存放zip压缩包的 distributionUrl Gradle发行版压缩包的下载地址
注意:前面提到的 GRALE_USER_HOME环境变量用于这里的Gradle Wrapper 下载的特定版本的gradle 存储目录。如果我们没有配置过GRALE_USER_HOME 环境变量,默认在当前用户家目录下的.gradle 文件夹中。
那什么时候选择使用 gradle wrapper、什么时候选择使用本地gradle?
下载别人的项目或者使用操作以前自己写的不同版本的gradle项目时:用Gradle wrapper,也就是gradlew。
什么时候使用本地gradle?新建一个项目时使用gradle指令即可。