Gradle 简介
Gradle 是一款 Google 推出的基于 JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性
依赖管理、废弃了繁杂的 xml 文件,转而使用简洁的、支持多种语言(例如:
java、groovy 等)的 build 脚本文件。
官网地址 : https://gradle.org/
常见的构建工具
Ant: 2000 年 Apache 推出的纯 Java 编写构建工具,通过 xml[build.xml]文件管理项目
优点:使用灵活,速度快(快于 gradle 和 maven),
缺点:Ant 没有强加任何编码约定的项目目录结构,开发人员需编写繁杂 XML 文件构建指令,对开发人员是一个挑战。
Maven: 2004 年 Apache 组织推出的再次使用 xml 文件[pom.xml]管理项目的构建工具。
优点: 遵循一套约定大于配置的项目目录结构,使用统一的 GAV 坐标进行依赖管理,侧重于包管理。
缺点:项目构建过程僵化,配置文件编写不够灵活、不方便自定义组件,构建速度慢于 gradle。
Gradle: 2012 年 Google 推出的基于 Groovy 语言的全新项目构建工具,集合了 Ant 和 Maven 各自的优势。
优点:集 Ant 脚本的灵活性+Maven 约定大于配置的项目目录优势,支持多种远程仓库和插件,侧重于大项目构建。
缺点:学习成本高、资料少、脚本灵活、版本兼容性差等。
Gradle 安装
Gradle 和 Java版本对应关系
Java version | First Gradle version to support it |
---|---|
8 | 2.0 |
9 | 4.3 |
10 | 4.7 |
11 | 5.0 |
12 | 5.4 |
13 | 6.0 |
14 | 6.3 |
15 | 6.7 |
16 | 7.0 |
17 | 7.3 |
18 | 7.5 |
19 | 7.6 |
Mac 安装(使用Homebrew安装)
- 安装gradle
# 安装
brew install gradle
- 查看安装的版本号(检测是否安装成功)
gradle --version
- 查看安装的目录
brew list gradle
配置环境变量
查看当前(shell)
~/.bash_profile
是 Bash Shell 的配置文件,而~/.zshrc
是 Zsh Shell 的配置文件。这些文件用于配置各自的环境变量、别名、函数和其他 Shell 相关的设置。
-
~/.bash_profile
:Bash Shell 在登录时会加载该文件。它适用于 macOS 默认的终端应用程序 Terminal,默认使用的是 Bash Shell。 -
~/.zshrc
:Zsh Shell 在启动时会加载该文件。Zsh 是一种功能强大且高度可定制的 Shell,可以替代默认的 Bash Shell。在最新版本的 macOS(如 macOS Catalina 和 Big Sur)中,默认终端应用程序已经切换到使用 Zsh Shell。
如果正在使用默认的终端应用程序,并且没有手动更改 Shell,那么 ~/.bash_profile
文件将会被加载。但是,如果已切换为 Zsh Shell,那么应该编辑 ~/.zshrc
文件来配置环境变量和其他 Shell 相关设置。
根据当前使用的 Shell 来选择相应的配置文件进行编辑,以便设置 GRADLE_HOME
环境变量或其他需要的配置。
echo $SHELL
# 在终端中运行此命令后,会显示所使用的 shell 的路径。例如,如果输出是 `/bin/bash`,则表示当前使用的是 Bash Shell;如果输出是 `/bin/zsh`,则表示当前使用的是 Zsh Shell
bash shell 则使用配置文件: ~/.bash_profile
Zsh Shell 则使用配置文件: ~/.zshrc
# 添加 gradle本地仓库地址
export GRADLE_USER_HOME=/Users/mi/development/maven/repository
# gradle 安装地址(终端执行 gradle --version 有输出的话,就不需要配置)
# export GRADLE_HOME=/opt/homebrew/Cellar/gradle/8.2.1
- 重新加载配置文件
#
# bash shell 则使用: source ~/.bash_profile
# Zsh Shell 则使用: source ~/.zshrc
Gradle 项目目录结构
Gradle 项目默认目录结构和 Maven 项目的目录结构一致,都是基于约定大于配【Convention Over Configuration】。
其完整项目目录结构如下所示:
创建Gradle 项目
借助于 spring 脚手架创建 gradle 第一个项目:https://start.spring.io/
生成的目录结构如下所示
修改 maven 下载源
Gradle 自带的 Maven 源地址是国外的,该 Maven 源在国内的访问速度是很慢的,除非使用了特别的手段。一般情况下,
建议使用国内的第三方开放的 Maven 源或企业内部自建 Maven 源。
我们可以在 gradle 的 init.d 目录下创建以.gradle 结尾的文件,.gradle 文件可以实现在 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/' }
}
}
}
拓展 1:启用 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接口。
拓展 2:仓库地址说明
mavenLocal(): 指定使用maven本地仓库,而本地仓库在配置maven时settings文件指定的仓库位置。如E:/repository,gradle查找jar包顺序如下:USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml >> USER_HOME/.m2/repository
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仓库中存放的方式。
拓展 3:阿里云仓库地址请参考:https://developer.aliyun.com/mvn/guide
Wrapper 包装器
Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本的 Gradle
问题。例如:把自己的代码共享给其他人使用,可能出现如下情况:
1.对方电脑没有安装 gradle
2.对方电脑安装过 gradle,但是版本太旧了
这时候,我们就可以考虑使用 Gradle Wrapper 了。这也是官方建议使用 Gradle Wrapper 的原因。实际上有了 GradleWrapper 之后,我们本地是可以不配置 Gradle 的,下载 Gradle 项目后,使用 gradle 项目自带的 wrapper 操作也是可以的。
那如何使用 Gradle Wrapper 呢?
项目中的gradlew、gradlew.cmd脚本用的就是wrapper中规定的gradle版本。参见源码
而我们上面提到的gradle指令用的是本地gradle,所以gradle指令和gradlew指令所使用的gradle版本有可能是不一样的。
gradlew、gradlew.cmd的使用方式与gradle使用方式完全一致,只不过把gradle指令换成了gradlew指令。
也可以在终端执行 gradlew 指令时,指定指定一些参数,来控制 Wrapper 的生成,比如依赖的版本等,如下:
具体操作如下所示 :
gradle wrapper --gradle-version=4.4:升级wrapper版本号,只是修改gradle.properties中wrapper版本,未实际下载
gradle wrapper --gradle-version 5.2.1 --distribution-type all :关联源码用
GradleWrapper 的执行流程:
- 当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息
- 准确的将指定版本的 gradle 下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)
- 并构建本地缓存(GRADLE_USER_HOME目录下的caches目录中),下载再使用相同版本的gradle就不用下载了
- 之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本。如下图所示:
gradle-wrapper.properties 文件解读
在这里插入代码片
文章来源:https://www.toymoban.com/news/detail-719181.html
注意:
前面提到的 GRALE_USER_HOME 环境变量用于这里的 Gradle Wrapper 下载的特定版本的 gradle 存储目录。如果我们没有配置过 GRALE_USER_HOME 环境变量,默认在当前用户家目录下的.gradle 文件夹中。
那什么时候选择使用 gradle wrapper、什么时候选择使用本地 gradle?
下载别人的项目或者使用操作以前自己写的不同版本的gradle项目时:用Gradle wrapper,也即:gradlew什么时候使用本地gradle? 新建一个项目时: 使用gradle指令即可。文章来源地址https://www.toymoban.com/news/detail-719181.html
到了这里,关于Gradle 入门概念和Mac 安装Gradle的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!